ぽざうねっと

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  420  : 記事  0  : コメント  9718  : トラックバック  76

ニュース

さて、今年は何を漬けようか

書庫

日記カテゴリ

Accessory

Community

Private

System.Xml.Linq のクラス群をみると構成が DOM に似ています。
しかしこれは DOM よりもはるかに柔軟です。(というか扱いやすい)
なぜかというとこんなことができるんです。
XName key = "key";
XDocument doc = XDocument.Load(@"D:\temp\test2.xml");
XElement documentElement = (XElement)doc.FirstNode;
IEnumerable<XElement> elements =
    from item in documentElement.Elements("item")
    where item.Attribute(key).Value.EndsWith("1")
    select item;
XDocument anotherDoc = XDocument.Parse("<hoge/>");
XElement root = (XElement)anotherDoc.FirstNode;
root.Add(elements);
XElement newElm = new XElement("新規要素");
newElm.Value = "要素内容";
root.Add(newElm);
XAttribute attr = new XAttribute("属性", "属性値");
root.Add(attr);
Console.WriteLine(anotherDoc);
んで、これが結果。
<hoge 属性="属性値">
    <item key="11">1-1</item>
    <item key="21">2-1</item>
    <item key="31">3-1</item>
    <新規要素>要素内容</新規要素>
</hoge>
わかります?
これまである XML から要素を取り出して、別の XML に取り込もうと思ったら ImportNode やらしなければならなかったんですよ。
また XElement は普通に new できるので、要素の追加なども Create 系メソッドを使う必要がありません。
要素用、属性用とメソッドを使い分ける必要もありません。
XElement.Add の引数が XNode じゃなくて object なのは、サンプルでやってるように IEnumerable<XElement> も取り込めるようになんだろう、便利だ。
ほかの使い方もできるのだろうか?
投稿日時 : 2007年4月22日 9:50

コメント

No comments posted yet.

Post Feedback

タイトル
名前
Url:
コメント: