DOBON.NET DOBON.NETプログラミング掲示板過去ログ

XMLの書き換え

  • 題名: XMLの書き換え
  • 著者: moti
  • 日時: 2005/03/03 17:24:03
  • ID: 9522
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[WinXP、C# VS2003]
分類:[.NET]

お世話になっております。

XMLについてご教授願います。

XmlDocumentに入っているXMLのタグの属性を書き換えたいのですが、
やり方がよくわりません。

XmlElement root = CommandParams.DocumentElement;
XmlElement XXXX = (XmlElement)root.FirstChild;
XXXX.FirstChild.Value = XXXX.ToString();

上記のようにやっているのですが、2個目3個目・・・とやっていると
途中で落ちてしまいます。

なにかよい書き換え方は、ないでしょうか。
こんにちは中です。

>途中で落ちてしまいます。
落ちるとは何が起きましたか?
例外ですか?
エラーメッセージは?
スタックトレースは?

質問するときはくどいぐらいに情報を提示するように心がけましょう。(^^
返信ありがとうございます。

> >途中で落ちてしまいます。
> 落ちるとは何が起きましたか?
> 例外ですか?

例外がおこります。

> エラーメッセージは?

「オブジェクト参照がオブジェクト インスタンスに設定されていません。」

です。

1個目のタグの属性を書き換えることは可能なのです。
2個目のタグを書き換えると落ちる時や落ちない時があります。

落ちない時は別のXMLです。

<aaaa>ABC</aaaa>

<aaaa>XYZ</aaaa>

のように複数タグに対して行いたいのです。
1箇所の変更ならば平気なのですが。。。

良いやり方をご存知ではないでしょうか。
>XmlElement root = CommandParams.DocumentElement;
>XmlElement XXXX = (XmlElement)root.FirstChild;
>XXXX.FirstChild.Value = XXXX.ToString();

FirstChildのヘルプを見てください。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemxmlxmlnodeclassfirstchildtopic.asp

ノードの最初の子。そのようなノードがない場合は、 null 参照 (Visual Basic では Nothing) が返されます。

なので、実際にChildがあるかどうかを判定しなくてはいけません。

XmlElement root = CommandParams.DocumentElement;
XmlElement XXXX = (XmlElement)root.FirstChild;
if ( XXXX != null ) {
XXXX.FirstChild.Value = XXXX.ToString();
}
■No9538に返信(中博俊さんの記事)
ありがとうございます。

実際にChildがいるかの判定を行いました。
結果は、いました。

書き換えるXMLの内容確認しました。
例)
<aaa>0</aaa><bbb></bbb>

<aaa>の場合ですと値が入っているので値が書き換えられるようです。
<bbb>の値を変えようとすると例外が発生するようです。。。
値が入っていない場合でも書き換えが必要なのです。
> 実際にChildがいるかの判定を行いました。
> 結果は、いました。
> 書き換えるXMLの内容確認しました。
> 例)
> <aaa>0</aaa><bbb></bbb>
> <aaa>の場合ですと値が入っているので値が書き換えられるようです。
> <bbb>の値を変えようとすると例外が発生するようです。。。
> 値が入っていない場合でも書き換えが必要なのです。

ぜんぜんおきるかどうかが不定じゃないじゃないですか。
この場合の<aaa>から</aaa>の間をテキストノードといいます。
そして、コレは書き換えるのではありません。

存在しないテキストノードを追加するのです。

あとは考えてみてください。
  • 題名: Re[6]: XMLの書き換え
  • 著者: moti
  • 日時: 2005/03/05 4:07:25
  • ID: 9602
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
値が入っていないタグ(テキストノード)に対しても任意の値を
入れることができるようになりました。

InnerTextで可能です。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板