• ベストアンサー
  • 困ってます

XMLの特定のデータを書き込むには?

下記のXMLファイルを読み込んで、 タグYYYのキーでKEY2を検索し、 子要素AAAの値のData2を書き換えるという処理を 作ろうとしてるのですが、 なかなか解決策が見つかりません。 よろしくお願い致します。 例: abc.xml <XXX> <YYY KKK="KEY1"> <AAA>Data1</AAA> <BBB>Data2</BBB> <CCC>Data3</CCC> </YYY> <YYY KKK="KEY2"> <AAA>Data1</AAA> <BBB>Data2</BBB> <CCC>Data3</CCC> </YYY> <YYY KKK="KEY3"> <AAA>Data1</AAA> <BBB>Data2</BBB> <CCC>Data3</CCC> </YYY> </XXX>

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数114
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
noname#25230
noname#25230

----------- sample --------------- Dim xmlDoc As New Xml.XmlDocument xmlDoc.Load("XmlFile.xml") Dim nodeList As Xml.XmlNodeList = xmlDoc.SelectNodes("XXX/YYY[@KKK='KEY1']/AAA") For Each xmlNode As Xml.XmlNode In nodeList xmlNode.InnerXml = "CHANGED" Next xmlDoc.Save("XmlFile2.xml") ----------- sample --------------- こんな感じでどうですか?エラー処理その他はしょってますのでいい加減ですが。 まず、xmlDocumentオブジェクトにファイルをロードします。次に、XMLの特定の場所を、xPathという書式で、条件付きで指定します。上記だと、「XXX/YYY[@KKK='KEY1']/]で、KKKがKEY1に一致するブロックを。さらに、AAAタグまでを書式に入れることで、条件に一致するブロックの中の、AAAタグ部分を一気に指定し、特定できます。 特定したものはxmlNodeオブジェクトに格納されるので、そこの内容を書き換えます。最後に、ファイル全体に連携しているxmlDocumentオブジェクトにSave命令を出せば終わり。 この例では、XmlFile.xmlというファイルの、該当箇所を「CHANGED」という文字に書き換えて、XmlFile2.xmlに保存してます。 方法はいくつもありますが、とりあえずその1つということで。 私自身、XMLの正式な勉強はしてませんので、細かいところで突っ込みがありましたら、有識者の方、お願いします。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございました。 XPathじゃなくてもコマンド使用できるのは知らなかったです。

関連するQ&A

  • jQueryでxmlデータ取得について

    jQueryでxmlのデータを取得しました。 jsで宣言した変数データがあって、 その変数のデータと xmlのタグ(ノード)が一致していた場合、 そのxmlデータの値を返したいと考えています。 xmlは以下の感じです。 タグ名はすべて異なりますが、順番に並んでいます。 <data1>aaa</data1> <data2>bbb</data2> <data3>ccc</data3> 例としては jsでの変数の値がdata1の場合は、 xmlの<data1>の値を取得したいんです。 jsでの変数の値がdata2の場合は、 xmlの<data2>の値を取得したいんです。 そんな事ってできますか? 初心者なもので、とんちんかんな質問かもしれませんが どうか、宜しくお願いいたします。

    • ベストアンサー
    • AJAX
  • 要素名を表示させたい

    <data>   <aaa xxx="0">     <yyy zzz="1"/>     <yyy zzz="2"/>   </aaa>   <bbb xxx="0">     <yyy zzz="1"/>     <yyy zzz="2"/>   </bbb>   <ccc xxx="0">     <yyy zzz="1"/>     <yyy zzz="2"/>   </ccc> </data> 上のようなXMLから、XSLのvalue-ofなどを使って、 要素名aaa、bbb、cccを表示させるにはどう記述すればいいのでしょうか?

    • ベストアンサー
    • XML
  • スマートなxsltの記述方法

    xml→xmlを行うxsltの記述方法で質問があります。 元のxmlの例を下に示します。 <?xml version="1.0" encoding="Shift_JIS" ?> <root> <A1> <B1> <DATA1>aaa</DATA1> <DATA2>bbb</DATA2> </B1> </A1> <A2> <DATA3>ccc</DATA3> <DATA4>ddd</DATA4> <B2> <DATA5>eee</DATA5> <C1> <DATA6>fff</DATA6> </C1> <DATA7>ggg</DATA7> </B2> </A2> <DATA8>hhh</DATA8> </root> (実際はDATA1,DATA2のような規則的な要素名ではありません) 変換後のxmlとしては <root> <DATA1>aaa</DATA1> <DATA2>bbb</DATA2>       ・       ・       ・ <DATA8>hhh</DATA8> </root> のように、値を持っている要素だけを、ルートノードの下に記述したものが欲しいのです。 作った物としては、  <xsl:template match="DATA1" >   <xsl:copy>    <xsl:value-of select="." />  </xsl:copy>  </xsl:template> このようなtemplateをDATA1-8まで記述するものです。 何か簡潔な記述方法はないでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • XML
  • XMLからデータを取得

    いつもお世話になっております。 XMLファイルに含まれたデータの中から、特定のデータを検索するプログラムを作りたいと思っております。 <AAA Name="テスト">    <BBB x="2" y="2"></BBB>    <CCC Num="0001"></CCC>    <CCC Num="0002"></CCC> </AAA> XMLデータの形式は↑みたいな感じで、これが100以上あり、CCCタグは0~5個までです。 フォームにテキストボックスを配置し、そこに検索したい語句を入れ、 AAAタグのNameの中身と合致したら、BBB、CCCの属性をすべて取得して表示するということをしたいのですが、 どうにも上手くいきません。 VB2008を使用しております。 方法をご存知の方、ご教授ください……orz

  • 複数のxmlファイルの合体

    複数のxmlファイルの合体 XML、JavaScriptのど素人です。諸先輩方のアドバイスを乞いたくよろしくお願いいたします。 XML本のサンプルプログラムで、XML/XSL/JavaScript(html内に記述されている)を用いた 検索プログラムを以下の理由で改良したいと考えています。 <books> <book> <data1>データ</data1> <data2>データ</data2> <data3>データ</data3> </book> </books> の構造を持つxmlファイルがあったとして データの更新が頻繁に行われるのは<data3>要素だけなので、 <books> <book> <data1>データ</data1> <data2>データ</data2> </book> </books> -----xml1 <books> <book> <data3>データ</data3> </book> </books> -----xml2 のように2ファイルに分離し、 JavaScriptの検索プログラムで、<data1>~<data3>要素から条件にあったデータを抽出したいのですが どうすればいいのでしょうか?よろしくお願いします。

    • 締切済み
    • XML
  • 最後からn番目のデータを抽出する方法。

    データフィールド数が固定していないデータの最後から、3番目を抽出する方法は。 a1 aaa 111 x11 zzz 001 a2 bbb 222 001 x22 yyy 002 a3 ccc 333 x33 xxx 003 a4 ddd 444 001 002 x44 www 004 結果 x11 x22 x33 x44

  • Cシェルでのファイル編集について

    Cシェルについて、すみませんが教えてください。。 AAA,BBB,1 1,data1,0000 2,data2,0000 3,data3,0000 4,data4,0000 ・・・ CCC,15,2,13 上記のようなヘッダ1行+データN(ここでは13行とする)行+トレイラ1行で 構成されているファイルがあり、このヘッダとトレイラを以下のようなファイル に加工するプログラムをCシェルで作成したいのですが、全く見当がつきません。 AAA,BBB,00001 1,data1,0000 2,data2,0000 3,data3,0000 4,data4,0000 ・・・ CCC,00015,00002,00013 ※ヘッダの3項目めを5桁になるように左0埋め ※トレイラの2項目めを5桁になるように左0埋め ※トレイラの3項目めを5桁になるように左0埋め ※トレイラの4項目めを5桁になるように左0埋め どなたか教えてください。よろしくお願いいたします。

  • SQL文 テーブル1つに複数のデータ

    お世話になっております。 SQLでの質問です。 --テーブル---------- F_1 F_2 AAA BBB AAA CCC BBB XXX CCC DDD DDD YYY 1.F_1のAAAを条件にF_2のBBB・CCCを取得し、 F_1のBBB・CCCと、F_2のXXXとDDDを取得します。 2.次に、取得したF_2のXXX・DDDを条件に、F_1のDDD、F_2のYYYを取得します。 これを1つのSQLで実行したいのですが、副問合せを駆使しても、良いSQLが思い浮かびません。 有識者の方、ご享受頂きたいです。 宜しくお願い致します。

  • AccessSQL 1つのテーブルに複数のデータ

    お世話になっております。 アクセスSQLでの質問です。 --テーブル---------- F_1 F_2 AAA BBB AAA CCC BBB XXX CCC DDD DDD YYY 1.F_1のAAAを条件にF_2のBBB・CCCを取得し、 F_1のBBB・CCCと、F_2のXXXとDDDを取得します。 次に、取得したF_2のXXX・DDDを条件に、F_1のDDD、F_2のYYYを取得します。 つまり、AAAを取得した結果、SQL一つで、上記テーブルデータをF_1:AAA以外、取得したい要件です。 有識者の方、ご享受頂きたいです。 宜しくお願い致します 【自力で考えた結果】 -------------------------- select F_MenuCD,F_ZaiCD from [TABLE] where F_MenuCD IN ( SELECT F_ZaiCD FROM [TABLE] WHERE F_MenuCD IN ('AAA') ); F_1 F_2 BBB XXX CCC DDD を取得するSQLは上記でいけそうなのですが、 DDD YYY を、1つのSQLで取得したいのです。

  • VBAで行範囲を抽出して隣のセルに貼り付ける

    Excel VBA初心者です。 A列にある以下のデータの「aaa」から「bbb」の範囲を検索して 切り取り、隣のセル(B列)に貼り付けるマクロを教えてください。 実際のデータは「aaa」から「bbb」の範囲のデータが500個くらい あるので、隣のセルに貼り付けていく作業をマクロで処理したいと 考えています。 ・マクロ処理前 列A aaa data0 data1 data2 bbb datax ------------ aaa data3 data4 data5 bbb datay ------------ aaa data6 data7 data8 bbb dataz ・マクロ処理後 (処理前のdatax、datay、datazは列Aに残ったままで構いません) 列A  列B   列C    列D 空白  aaa   aaa   aaa 空白  data0   data3   data6 空白  data1   data4  data7 空白  data2   data5  data8 空白  bbb   bbb  bbb