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をものすごぉく意識した方法でやると以下のとおり。無駄に行数増えるだけじゃん、って気がしてならない。
一般的に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より速かったりするんかな?知らん。だれか調べて。