- PR -

指定ノードの要素の更新について

投稿者投稿内容
かもがや
大ベテラン
会議室デビュー日: 2004/08/31
投稿数: 103
投稿日時: 2004-11-08 09:47
脳味噌筋肉です。

引用:

Dim AAA As XmlNode
AAA = xmldoc.SelectNode("HogeRoot/HogeChild[ID=1]/grandchild")



の時点で「型System.Xml.XmlNodeListの値をSystem.Xml.XmlNodeに変換できません」
と叱られます。

なので、〜NodeListでやってみたもののうまくいかず・・。
難しいですね(^^;

とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-11-08 10:49
こんにちは。

引用:

脳味噌筋肉さんの書き込み (2004-11-08 09:47) より:

引用:

Dim AAA As XmlNode
AAA = xmldoc.SelectNode("HogeRoot/HogeChild[ID=1]/grandchild")



の時点で「型System.Xml.XmlNodeListの値をSystem.Xml.XmlNodeに変換できません」
と叱られます。




すいません、訂正です。慌てて書いて間違ってしましました。申し訳ない。

あるリストの中から1つの要素を取得するときはXmlNodeを(例えば HogeChild のID が"1"
のgrandchildノードを取得したいなら変数A:XmlNodeには"孫1"が格納される)、またリスト
の中から要素のリストを取得したいならXmlNodeListを使用します(同じく変数A:XmlNodeListには"孫1"から"孫5"が格納される)。

Dim AAA As XmlNode
AAA = xmldoc.SelectSingleNode("HogeRoot/HogeChild[ID=1]/grandchild")

Dim AAA As XmlNodeList
AAA = xmldoc.SelectNodes("HogeRoot/HogeChild[ID=1]/grandchild")

これでお願いします。


[ メッセージ編集済み 編集者: とっと 編集日時 2004-11-08 10:58 ]
かもがや
大ベテラン
会議室デビュー日: 2004/08/31
投稿数: 103
投稿日時: 2004-11-08 10:59
レスありがとうございます。

引用:

あるリストの中から1つの要素を取得するときはXmlNodeを(例えば HogeChild のID が"1"
のgrandchildノードを取得したいなら変数A:XmlNodeには"孫1"が格納される)、またリスト
の中から要素のリストを取得したいならXmlNodeListを使用します(同じく変数A:XmlNodeListには"孫1"から"孫5"が格納される)。

 ですから配列を普通の変数に変換しているようなもので怒られるのも仕方ないかと思います。




勉強させて頂きます。

その後、以下のコードで試してみたところ

引用:

Dim List As XmlNodeList = xDoc.SelectNodes(xPathString)
Dim i As Integer
For i = 0 To List.Count - 1
List.Item(i).InnerText = "孫新1"
Next



結果は

<HogeRoot>
<HogeChild ID="1">孫新1</HogeChild>
</HogeRoot>

もうちょっとで・・ゴールが(^^;
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-11-08 11:01
こんにちは。

前のレス訂正しました。
かもがや
大ベテラン
会議室デビュー日: 2004/08/31
投稿数: 103
投稿日時: 2004-11-08 11:30
以下のコードだと

引用:

Dim List As XmlNodeList = xDoc.SelectNodes(xPathString)
Dim i As Integer
For i = 0 To List.Count - 1
Dim replaceNode As XmlElement = xDoc.CreateElement("grandchild")
replaceNode.InnerText = "孫新1"
List.Item(i).PrependChild(replaceNode)
Next



結果は

<HogeChild ID="1">
<grandchild>孫新1</grandchild>
<grandchild>孫1</grandchild>
</HogeChild>


うーん(^^;
かもがや
大ベテラン
会議室デビュー日: 2004/08/31
投稿数: 103
投稿日時: 2004-11-08 11:34
脳味噌筋肉です。
諦めてファイル操作(文字列変換)で対応することにしました。

いろいろとご助言ありがとうございました。m(_)m
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-11-08 11:47
こんにちは。

引用:

脳味噌筋肉さんの書き込み (2004-11-08 11:30) より:
以下のコードだと

引用:

Dim List As XmlNodeList = xDoc.SelectNodes(xPathString)
Dim i As Integer
For i = 0 To List.Count - 1
Dim replaceNode As XmlElement = xDoc.CreateElement("grandchild")
replaceNode.InnerText = "孫新1"
List.Item(i).PrependChild(replaceNode)
Next



結果は

<HogeChild ID="1">
<grandchild>孫新1</grandchild>
<grandchild>孫1</grandchild>
</HogeChild>




Dim List As XmlNodeList = xDoc.SelectNodes(xPathString)

ここで、ノードのリストを取得しているにも関わらず、

Dim replaceNode As XmlElement = xDoc.CreateElement("grandchild")

で新たな要素を追加し、それを更新しているからだと思います。

その前の投稿で

<HogeRoot>
<HogeChild ID="1">孫新1</HogeChild>
</HogeRoot>

もうちょっとで・・ゴールが(^^;

できてたんじゃ・・・

かもがや
大ベテラン
会議室デビュー日: 2004/08/31
投稿数: 103
投稿日時: 2004-11-08 11:54
とっとさん、お世話になってます。

望みは

<HogeRoot>
<HogeChild ID="1">
孫新1
</HogeChild>
</HogeRoot>

ではなくて

<HogeRoot>
<HogeChild ID="1">
<GroundChild>孫新1</GroundChild>
</HogeChild>
</HogeRoot>

の形だったのです。

お騒がせしました(((^^;

スキルアップ/キャリアアップ(JOB@IT)