- - PR -
指定ノードの要素の更新について
1|2|3|4
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-11-05 18:05
お世話になっております。
<?xml version="1.0" encoding="Shift_JIS"?> <HogeRoot> <HogeChild ID="1"> <grandchild>孫1</grandchild> </HogeChild> <HogeChild ID="2"> <grandchild>孫2</grandchild> </HogeChild> <HogeChild ID="3"> <grandchild>孫3</grandchild> </HogeChild> <HogeChild ID="4"> <grandchild>孫4</grandchild> </HogeChild> <HogeChild ID="5"> <grandchild>孫5</grandchild> </HogeChild> </HogeRoot> なるXMLファイル中の『HogeChild ID="1"』の、下位ノードである『grandchild』 の要素『孫1』を『孫新1』に更新させようと以下のようなコードを書いて試して みました。 Dim xDoc As New XmlDocument xDoc.Load("test.xml") Dim xPathString As String = "HogeRoot" + "/HogeChild ID=" + Chr(34) + "1" + Chr(34) + "/grandchild" Dim List As XmlNodeList = xDoc.GetElementsByTagName(xPathString) Dim i As Integer For i = 0 To List.Count - 1 Dim replaceNode As XmlElement = xDoc.CreateElement("孫新1") List.Item(i).ParentNode.ReplaceChild(replaceNode, List.Item(i)) Next xDoc.Save("test.xml") 結果は何も変わらず・・・です。 識者の方、マズい箇所のご指摘を頂ければ幸いです。 | ||||
|
投稿日時: 2004-11-05 18:44
そのままコピペして実行すると
XPathからListを取得できてないのですが。。。。 デバッグでおいましたか? | ||||
|
投稿日時: 2004-11-05 19:01
レスありがとうございます。
おっしゃるとおりListが取得できていませんでした。 そこでXPathを以下のように変更し Dim xPathString As String = "descendant::HogeChild [@ID='" + "1" + "']" GetElementsByTagNameもSelectNodesに変えてみました。 Dim List As XmlNodeList = xDoc.SelectNodes(xPathString) 今度はListが取得できるようになったものの Dim replaceNode As XmlElement = xDoc.CreateElement("孫新1") で例外が発生。 難しいですね・・・ | ||||
|
投稿日時: 2004-11-05 19:05
『孫1』を『孫新1』に変更したいなら
Dim replaceNode As XmlElement = xDoc.CreateElement("grandchild") replaceNode.InnerText = "孫新1" なのでは? | ||||
|
投稿日時: 2004-11-05 19:28
レスありがとうございます。
我ながらなんと間抜けな・・、おっしゃるとおりです。 | ||||
|
投稿日時: 2004-11-05 19:34
そこで再実行してみると
<?xml version="1.0" encoding="Shift_JIS"?> <HogeRoot> <grandchild>孫新1</grandchild> <HogeChild ID="2"> <grandchild>孫2</grandchild> </HogeChild> <HogeChild ID="3"> <grandchild>孫3</grandchild> </HogeChild> <HogeChild ID="4"> <grandchild>孫4</grandchild> </HogeChild> <HogeChild ID="5"> <grandchild>孫5</grandchild> </HogeChild> </HogeRoot> ノードのつかみ方が悪いのでしょうか・・ それともInnerTextにつかんだノード(タグ)もセットするのが正しいのでしょうか?・・ とりあえず?後者の方法で確かめてみます。 | ||||
|
投稿日時: 2004-11-05 20:13
こんにちは。
予めIDが分かっているなら Dim AAA As XmlNode AAA = xmldoc.SelectNode("HogeRoot/HogeChild[ID=1]/grandchild") AAA.InnerText = "孫新1" xDoc.Save("test.xml") でもいけますよ。 Dim List As XmlNodeList = xDoc.SelectNodes(xPathString) でNodeListを取得したなら List(index).InnerText = "孫新1" でOKです | ||||
|
投稿日時: 2004-11-06 15:49
おお、ありがとうございます(TT)
こういうXPATHの書き方があるのですね。 ちゃんと理解していないもので。 勉強させていただきます。 |
1|2|3|4
次のページへ»