アットウィキロゴ
yi01.memo
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

yi01.memo

2008-01-20

最終更新:

yi01memo

- view
管理者のみ編集可

C#でのXML文書の扱い

using System.Xml;

おまじない

XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml("(XML文書)"); あるいは xmldoc.Load("(ファイルパス)");
XmlElement root = xmldoc.DocumentElement;
これでルート要素が得られます

読む、書く

  • 要素.FirstChild
  • 要素.NextSibling
  • 要素.InnerXML
などの組み合わせで読む。
  • 要素.InnerXML
  • 要素.InnerText
は編集・削除にも使えて便利

XMLファイルの書き出しは普通にStreamWriter使えばよろし。

サンプル

XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(@"

<DocRoot>
<aaa>
<sss>ここはいらん</sss>
</aaa>
<aaa>
<sss>ここがほしい</sss>
</aaa>
</DocRoot>

");

XmlElement root = xmldoc.DocumentElement;

Console.WriteLine(root.FirstChild.NextSibling.FirstChild.InnerXml);
→「ここがほしい」が得られる(string)

堅い話

まじめにノード追加

真面目じゃないノード追加は上でやったように、要素.InnerXML+="<aaa>(ごにょごにょ)</aaa>"とかで十分できるが
一般的にDOMをものすごぉく意識した方法でやると以下のとおり。無駄に行数増えるだけじゃん、って気がしてならない。

ノード
XmlElement elem = xmldoc.CreateElement("aaa"); 間違ってるかも知らん。コマンド補完にまかせよう
elem.InnerText = "(ごにょごにょ)" さらに堅いやり方だと、ここもテキストノードをつくってやるべきか?
ノード.AppendChild(elem);
これでLastChildとして追加されるようだ。

属性(Attribute)
XmlAttribute at = xmldoc.CreateAttribute("aaa");
at.Value = "(ごにょごにょ)"
ノード.Attributes.Append(at);

テキストノード
XmlText txt =xmldoc.CreateTextnode(~ しらん コマンド補完に任せよう おれ使わんし
ノード.AppendChild(txt);

可読性が著しく落ちるので、おれはこんなの使いません。

でも、処理スピードはInnerXMLより速かったりするんかな?知らん。だれか調べて。
記事メニュー
最近更新されたスレッド
ウィキ募集バナー