タイトル : Re^18: XMLのデータ追加について 投稿日 : 2008/05/16(Fri) 15:39 投稿者 : 魔界の仮面弁士
# そして今回も、XML 文法違反のようで……。(^^;) > YuOさんの方法でやってみましたが・・う〜・うまくいかないです。 一文字削れば動くと思いますよ。 >> For Each node As XmlNode In xmlDoc.SelectNodes("root/data2/con") ではなく、 For Each node As XmlNode In xmlDoc.SelectNodes("root/data/con") に。 > 結局、カウントをとって毎回、FirstChildを見て更新する方法にしてみました。 カウントを取るなら、 Dim children As XmlNodeList = xmlDoc.SelectNodes("root/data/con") For N As Integer = 0 To children.Count - 1 PrNode.AppendChild(children(N)) Next かな。 > Dim ChdNode As XmlNode = xmlDoc.SelectSingleNode("root/data") > Dim intCnt As Integer = ChdNode.ChildNodes.Count この方法の場合、テキストノードも含まれる事に注意してください。 Dim xmlDoc As New XmlDocument() xmlDoc.PreserveWhitespace = True '空白の保持 xmlDoc.Load("C:\sample.xml") のように、PreserveWhitespace = True / False の影響を受けます。 ChdNode の内容が <data> <con id="1">aaa</con> <con id="2">bbb</con> </data> の場合、data の子ノードは 5 つです。(改行、con、改行、con、改行) ChdNode の内容が <data><con id="1">aaa</con><con id="2">bbb</con></data> の場合で、data の子ノードは 2 つです。(con、con) > <data id="100">rrr</data> > のElementを作成して 作成する所まではできましたでしょうか? CreateNode を使えば生成する事ができます。 あるいは、CreateElement や CreateAttribute などでも OK です。 > <data2 id="3">ccc</data2> > の直前にinsertする、というようなロジックを組みましたが、これも > うまくいきません。 まず、その data2 ノードを取得する方法さえわかれば、 Dim target As XmlNode = ??? target.ParentNode.InsertBefore(newNode, target) のように書くことができますね。 > <root>タグの<data>ノードの中で一番最後のもの、 Dim a As XmlNode = xmlDoc.SelectSingleNode("/root/data[position()=last()]") または Dim a As XmlNode = xmlDoc.SelectSingleNode("/root/data[last()]") > <root>タグの<data2>ノードの中で一番最初のもの Dim b As XmlNode = xmlDoc.SelectSingleNode("/root/data2") または Dim b As XmlNode = xmlDoc.SelectSingleNode("/root/data2[position()=1]") または Dim b As XmlNode = xmlDoc.SelectSingleNode("/root/data2[1]") |