• 締切済み

XML文書内容の追記、補記ってどうするの?

VC++にて、XMLを扱っています。 もう用意されているXML文書に対して、文末ではなく、文中に新しいタグとともに追記をしたいんですがどのようにすればよいのでしょうか? 処理の流れ的には StreamReaderクラスよりString型にXML文書を読み込む。 ↓ XMLDocumentクラスのLordXMLでそのString型を読み込む。←ここまではできている。 ここから先なんですが、 1、追記したい箇所を選択する、そこに追記する(新しいタグとともに追記する) 2、できがった文書を保存する という流れにしたいのですが具体的にどうしたらよいでしょうか? ※1でだいたいこの内容のあたりというのを一覧化しておいて、それを選択し、追記する時になるべく編集者がXMLのコードを見なくてもよいように作りたいのです。 どのようにすれば実現できるのか、わからないので教えていただけないでしょうか?また参考になるようなページなどもありましたらよろしくお願いします。 補足 具体的に扱っているXML文書はgpxファイルで緯度、経度のポイントに応じて追記したいのです。

みんなの回答

  • tanma3
  • ベストアンサー率58% (14/24)
回答No.1

簡単にですが、基本的には以下のようになると思います。 1.CreateElement()にて要素情報を作成。 2.AppendChile()にて要素を追加。 以下のURLで、同じことが質問されていますので参考にしてください。 C#での質問ですが、.net farmeworkのクラスですので、基本的に使い方、文法には差異はないと思われます。 後、アドバイスとしてですが、開発環境は詳細に記述したほうがいいですよ。 特にvc++の場合は、SDK,MFC,.net等同じ統合環境を使っていてもいろいろ差異がありますので。。。

参考URL:
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7563&forum=7
azuna_1987
質問者

お礼

遅くなってしまいましたが、ありがとうございます。 大変、助かりました。

関連するQ&A

  • バッチでXMLにタグを追記する方法について

    バッチでXMLファイルに任意のタグと値を追記することは可能でしょうか? もし可能であれば、具体的な方法を教えていただきたいです。

  • XMLのparseエラーについて

    JavaのURLでWASにあるXMLファイルにアクセスし、その内容をcom.sun.xml.tree.XmlDocumentクラスのインすタンスを生成したいと思っています。 ソース抜粋 PrintWriter out = new PrintWriter(new OutputStreamWriter(con.getOutputStream(), "UTF-8")); out.print(xmlDoc.writeString()); out.flush(); out.close(); con.connect(); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8")); String inputLine = null; while ((inputLine = in.readLine()) != null) { answer.append(inputLine); } new XmlDocument(is, false); 上記のnew XmlDocument(is, false);を実行したら、例外で落ちてしまいます。 エラー内容は、org.xml.sax.SAXParseException: com.sun.xml.parser/P-019 XMLの書式が悪いと思いためしに、 new XmlDocument(is, false);を実行する前に、XMLファイルを作成し、ブラウザで表示したところ正常でした。 原因がわかりません、皆さんよろしくお願いします。

  • XMLからデータセットへ

    こんにちは 初めての質問です。 今XML形の文字列があります。 string strXML = @" <dataset1> <table1> <column1>a</column1> <column1>b</column1> <column1>c</column1> <column1>d</column1> <column1>e</column1> <column1>f</column1> </table1> </dataset1>"; この文字列をXMLファイルとして保存します。 XmlDocument xml = new XmlDocument(); xml.LoadXml(strXML); xml.Save(@"C:\test.xml"); 保存したXMLファイルをデータセットで読み込みます。 DataSet ds = new DataSet(); ds.ReadXml(@"C:\test.xml"); 以上の流れでデータセットの作成はできますが、 一回XMLファイルを保存しないといけません。 何とか保存しないで、文字列から直接データセットを生成する方法はありますか? よろしくお願いします。

    • ベストアンサー
    • XML
  • GPSで取得した値を別のクラスで利用する方法

    はじめまして。 僕はJavaの初心者で、今androidのアプリケーション作りに取り組んでいます。 ロケーションマネージャを利用して、現在地の緯度、経度の値を取得し、ある特定のポイント(例えば東京タワー)と現在地の距離を計算するアプリを作っています。 緯度、経度を取得するところまではできました。 次に、距離を求めるために、両点の緯度差、経度差を計算したいのですが、ロケーションリスナのクラスで取得した緯度、経度の値を、別のクラス(例えばスピナのリスナ)で利用するためにはどのようにすればよいのかがわからず困っています。 具体的には、下に示すロケーションリスナのクラスで取得したの"lt"と"ln"の値を、別のクラスで計算に利用したいです。 class SampleLocationListener implements LocationListener { public void onLocationChanged(Location lc) { double lt = (double) (lc.getLatitude()); double ln = (double) (lc.getLongitude()); } public void onProviderDisabled(String pv){} public void onProviderEnabled(String pv){} public void onStatusChanged(String pv, int status, Bundle ex){} } どなたか詳しい方、教えていただけたらうれしいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • ActionScript3でのXML操作

    ActionScriptの初心者です。お世話になります。 既存のXMLにデータを追加していきたいのですがやり方がわかりません。データは以下のようなフォーマットです。 <books> <book> <title>...</title> <author priority="1">...</author> <!--■authorのpriorityを参照してこの辺に追加したりします--> <author priority="2">...</autor> <book> <books> Web上、adobeのリファレンスでいろいろ探したのですが、ほとんどXMLのデータを参照する方法しか紹介されていません。XMLのデータにタグを追加したり、削除したりする方法、またはWeb上のサンプル等何でもよいので、おしえていただけますでしょうか? または、XMLクラスを使わず行単位で正規表現で文字処理する方法でもかまいません。よろしくお願いします。m(_*_)m バージョン:AcrionScript3.0 (XMLDocumentなどのクラスを使わず、W3Cで定義されているXPathのようなアクセス方法、.とか、@とかでアクセスする方法です。)

    • ベストアンサー
    • Flash
  • XML文書をjavaを使ってCSV文書に...

    プログラム初心者なのですが csv.jpgのような形で、DOM,SAXどちらかを 使って変換したいのですが誰か教えてください。 xmlは -<item_list>- <item code="1"> <name>靴下</name> <maker>マイクロソフト</maker>- <option seq="1"> <attribute name="材質">ナイロン</attribute> <attribute name="サイズ">S</attribute> <attribute name="色">黒</attribute><attribute name="性別">男</attribute><price>500</price> </option>- <option seq="2"> <attribute name="材質">ナイロン</attribute> <attribute name="サイズ">M</attribute> <attribute name="色">黒</attribute> <attribute name="性別">男</attribute><price>500</price> ~ なものが続いてくる形です。 DTDは <?xml version="1.0" encoding="Shift_JIS" ?> <!ELEMENT item_list (item+)> <!ELEMENT item (name+,maker+,option+)> <!ATTLIST item code NMTOKENS #REQUIRED> <!ELEMENT name (#PCDATA)> <!ELEMENT maker (#PCDATA)> <!ELEMENT option (attribute+,price)> <!ATTLIST attribute name CDATA #REQUIRED> <!ELEMENT price (#PCDATA)> でやっています。 現在のプログラムの状態は import java.io.*; import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.stream.*; import javax.xml.transform.dom.*; import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.*; //文書の入出力 class Exam3{ public static void main(String args[]) throws Exception{ SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); //SAXの準備 SampleHandler1 sh = new SampleHandler1(); //パンドアの作成 sp.parse(new FileInputStream("item_list_japan.xml"), sh); //XML文書をロード } } class SampleHandler1 extends DefaultHandler{ //パンドラクラス int YS=0; int YS2=0; int YS3=0; String[] ST= new String[80000000]; int ST1=0; int ab=0; int ab2=0; String tin="null"; StringBuffer sb = new StringBuffer(); //文字列を用意 public void endDocument(){ //文書の終了 try{ //文字列を書き出す PrintWriter pw = new PrintWriter (new BufferedWriter (new FileWriter("List2.csv"))); pw.println(sb); pw.close(); }catch(Exception e){} } public void startElement(String namespaceURI, String localName, String qName, //qNameは要素 Attributes attrs) { if(qName.equals("item")){ YS = 0; YS2=0; ab2=0; sb.append("商品コード"+","); for(int i=0;i<attrs.getLength();i++){ sb.append(attrs.getValue(i)+","); } }else if(qName.equals("name")){ sb.append("商品名"+","); }else if(qName.equals("maker")){ sb.append("製造元"+","); }else if(qName.equals("option")){ if(YS2==0){ sb.append("オプション"+","); YS2=1; YS3=0; } } if(qName.equals("attribute")){ if(YS3==0){ for(int i=0;i<attrs.getLength();i++){ if(attrs.getValue(i)!=""){ sb.append(attrs.getValue(i)+","); } } YS=1; } }else if(YS==1){ YS3=1; } tin=qName; } public void endElement(String namespaceURI,String localName,String qName){ if(qName.equals("option")){ sb.append("\r\n"); } //tin=qName; if(qName.equals("price")){ if(ab2==0){ sb.append("\r\n"); ab2=1; } sb.append(",,,,"); while(ST[ab]!=null){ sb.append(ST[ab]); ab++; } } } public void characters(char[] ch,int start,int length){ String str = new String(ch,start,length); if(tin=="attribute"){ ST[ST1]=(str+","); ST1++; } } } です。 回答よろしくお願いします。

    • 締切済み
    • XML
  • xmlの値を配列に格納したいんですけどエラーがでてしまう。

    <?xml version="1.0" encoding="UTF-8" ?> <Dataroot> <aaa> <bbb> <ccc>値1</ccc> </bbb> <bbb> <ccc>値2</ccc> </bbb> </aaa> </Dataroot> ---------------------------------------------------------------- のようなXML文書がある時<ccc></ccc>の値を取り出す場合 ---------------------------------------------------------------- Imports System Imports System.IO Imports System.Xml public class Sample public shared sub Main() Dim doc as XmlDocument = new XmlDocument() doc.Load("data.xml") 'XML文書の読み込み Dim root as XmlElement = doc.DocumentElement Dim nodeList as XmlNodeList nodeList = root.SelectNodes("/Dataroot/aaa/bbb")'/cccまでやる方が簡単 Dim node as XmlNode Dim ccclist() As String = Nothing for each node in nodeList ccclist(nodeList.Count) = node.SelectSingleNode("ccc").InnerText '内容の取り出し next end sub end class としているのですが ccclist(nodeList.Count) = node.SelectSingleNode("ccc").InnerText '内容の取り出し この行で オブジェクト参照がオブジェクト インスタンスに設定されていません。 とエラーがでて困っています。 これはどのように修正すればよろしいでしょうか? 教えてください。お願いします。

  • HasAttributes 的な関数はないでしょう

    お世話になります。 C# WPFで作成しております。 C#でXMLファイルを読み込んで、「view」アトリビュートがあるタグにだけ 処理をしたいと思い下記のソース・xmlを作成しました。 しかしながら、number=1にはviewアトリビュートもあるのですが、 number=2以降はアトリビュートがないのでエラーがでます。 しかしながら、全てのpageタグにviewアトリビュートをつける手間を 増やしたくありません。 viewアトリビュートがあれば、中を見て、if分チェック、タグがなければ、無視をして エラーを出さずに処理を続けるにはどうしたらよいでしょうか? お手数ですがよろしくお願い致します。 --------------C#ソース------------- xmlDocument = new XmlDocument(); xmlDocument.Load(XML文書); //読み込み XmlNodeList nodeList = xmlDocument.SelectNodes("/data/page");//page以下のノードを読み込み int count = nodeList.Count; for (int i = 0; i < count; i++) { if("on"==nodeList[i].Attributes["view"].Value) //viewタグがonなら処理をする {         処理をする } } ----------xml---------- <data> <page number="1" view="on"></page> <page number="2" ></page> <page number="3" ></page> <page number="4" ></page> ------------------------ </data>

  • XMLファイルからタグごとバッファにとりだす方法は?

    こんばんわ。 MS C#2005でXMLファイルをDBに取り込むPGを作っています。 困ったことが発生したのですが、調べるにしてもどこからせめてよいのか見当がつかなくなり、どうにもならなくなってしまいました。 以下に簡単ですが、読み込みしたいXMLを記述します。 <?xml version="1.0" encoding="utf-8"?> <XML情報 version="1.0">   <リスト 番号="1">     <概要>       <表示番号>0123456789</表示番号>       <概要タグ2>xxx</概要タグ2>       <概要タグ3>xxx</概要タグ3>         ・         ・     </概要>     <詳細>       <注文>         <アイテム 品目="○○">○○</アイテム>         <アイテム 品目="□□">□□</アイテム>       </注文>     </詳細>   </リスト> </XML情報> 上記のXMLファイルから「<詳細>~</詳細>」間をタグつきの文字列として取り出し、いったんバッファ上に確保した上でDB(SQL Server2005)へ取り込みしたいのです。 ただし、DBへ取り込む際に「<アイテム>」部分の値を一部変更するので(具体的には「品目」属性の値を手直しする)XML的な取り扱いをしながらバッファ操作する方法を探しています。 問題なのは、XMLファイルから「<詳細>~</詳細>」間をタグつきの文字列として取り出す振る舞いを検索エンジンなどで探すにあたって、どういったキーワードで探したらいいのか皆目見当がつきません。 XMLReaderクラスなどの項目で検索しているのですが、思ったような結果が導き出せないでいます。 もしかすると、XML操作関連クラスでは実現できないのではないかと思い、少々混乱しています。 これだけの情報でこちらの意図していることが理解できましたら、その解決法(検索キーワードだけでもかまいません)をご教授いただければと思います。 補足が必要であればお申し付けください。 よろしくお願いします。

  • C#の定数用クラスについて

    定数用のクラスを宣言し、定数を取得してxmlファイルからノードが読み込めません。 xmlファイル(set.xml) <?xml version="1.0" encoding="utf-8"?> <Setting> <!--メインフォーム--> <mainForm> <Width>400</Width> </mainForm> </Setting> 定数用クラス(nsConst.cs) namespace nsConst{ class setttingConst{ public readonly string FORM_NAME = "mainForm"; public readonly string TD_WIDTH = "Width"; } xml用クラス(nsxmlReWriter.cs) namespace nsxmlReWriter{ class xmlReWriter { public String read(String element1, String element2) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(@"c:\\test\set.xml"); string ret = null; try { //Rootの取得 XmlElement Root = xml.DocumentElement; //子ノードの取得 XmlNodeList child = Root.GetElementsByTagName(element1); //該当ありの場合 if (child.Count > 0) { XmlElement gchild = (XmlElement)child.Item(0); if (gchild.GetElementsByTagName(element2).Count > 0) { ret = gchild.GetElementsByTagName(element2).Item(0).InnerText; } } } catch (Exception ex) { throw new Exception(ex.Message); } return ret; } } //ここから定数、xmlクラスを呼び出す。 MainLogic.cs namespace nsMainLogic{ class MainLogic{ private void init(){ public readonly string FORM_NAME1 = "mainForm"; public readonly string TD_WIDTH1 = "Width"; setttingConst con = new setttingConst(); xmlReWriter xmlRw = new xmlReWriter(); string width1 = xmlRw.read(con.FORM_NAME,con.TD_WIDTH); //(1) string width2 = xmlRw.read(FORM_NAME1,TD_WIDTH1); //(2) : 省略 : } } } (1)ではxmlファイルを読み込んだ結果がnullなってしまい値が取れません。 (2)では値がとれます。 わかりましたらよろしくお願いします。

専門家に質問してみよう