2008年01月17日

Linq to XML その7

   このエントリーをはてなブックマークに追加 Clip to Evernote
Linq to XML その6

架空の人物だけを取得し、

<?xml version="1.0" encoding="utf-8"?>
<People>
<Person Age="40">
<Name>明智小五郎</Name>
</Person>
<Person Age="41">
<Name>両津勘吉</Name>
</Person>
</People>


というXMLファイルを作成してみようと思います。
読み込むXMLと異なるスキーマで出力していることに注目です。
ついでに、年齢に1を加える処理も追加してみました。

XDocument xdoc = XDocument.Load("newpeople.xml");
var query = from xperson in xdoc.Root.Elements()
where (bool)xperson.Attribute("IsReal") == false
select new XElement(
        "Person",
new XAttribute("Age", (int)xperson.Element("Age") + 1),
new XElement(xperson.Element("Name"))
);
XElement x = new XElement("People", query);  //★
x.Save("notreal.xml");


クエリ式で、架空の人物だけを抜き出すのですが、その際に返す型を XElement型にしています。
こうすることで、★の行のように、XElementのコンストラクタの第2引数に渡すことができます。

どうです。たったこれだけのコードで実現できるって、ちょっと感動ものじゃないですか?
これを DOMで書くとかなり面倒だと思う。


この記事へのコメント
LINQ to XMLその8
http://blog.livedoor.jp/gushwell/archives/51364699.html
Posted by LINQ to XMLその8 at 2008年04月19日 20:17
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/51353324