LINQ to XML のスニペット集
このページでは、LINQ to XML (System.Xml.Linq) のスニペットをまとめる予定のページです。
注意
- 言語は C# です。
- コードには
using System.Xml.Linq;
が必要です。- XPath を使用する場合は
using System.Xml.XPath;
が必要です。
- XPath を使用する場合は
ドキュメントの生成
+ XML宣言あり
var doc = new XDocument(
// <?xml version="1.0" encoding="UTF-8" ?>
new XDeclaration("1.0", "UTF-8", "no"),
// <root/>
new XElement("root"));
+ <?xml-stylesheet ?>
あり
var doc = new XDocument(
// <?xml version="1.0" encoding="UTF-8" ?>
new XDeclaration("1.0", "UTF-8", "no"),
// <?xml-stylesheet type='text/xsl' href='test.xsl'?>
new XProcessingInstruction("xml-stylesheet", "type='text/xsl' href='test.xsl'"),
// <root/>
new XElement("root"));
あとから <?xml-stylesheet ?>
を追加する
// ルート要素の前に <?xml-stylesheet type='text/xsl' href='test.xsl'?> を追加
doc.Root.AddBeforeSelf(new XProcessingInstruction("xml-stylesheet", "type='text/xsl' href='test.xsl'"));
ファイルを読み込む
var doc = XDocument.Load("test.xml");
ドキュメントをパースする
var doc = XDocument.Parse(@"<?xml version=""1.0"" encoding=""UTF-8"" ?>
<html xmlns=""http://www.w3.org/1999/xhtml"">
<head>
<title>test</title>
</head>
<body>
<div id=""test"">
<a href=""http://example.com/"">test</a>
</div>
</body>
</html>
");
XSLT
var newDoc = new XDocument(); // 変換結果を格納するXDocument
using (XmlWriter writer = newDoc.CreateWriter())
{
var xslt = new XslCompiledTransform();
xslt.Load("test.xsl"); // XSL読み込み
xslt.Transform(doc.CreateReader(), writer); // docをXSL変換
}
ドキュメントの保存
UTF-8 (BOMなし) + インデントありで保存する
// test.xml にXMLを保存
using (var writer = new XmlTextWriter("test.xml", new UTF8Encoding(false)))
{
writer.Formatting = Formatting.Indented; // インデント
doc.Save(writer);
}
要素の生成
+ 属性、テキストあり
// <a href="http://example.com">test</a>
var a = new XElement("a",
new XAttribute("href", "http://example.com/"),
"test");
+ 名前空間、属性、テキストあり
// <a xmlns="http://www.w3.org/1999/xhtml" href="http://example.com">test</a>
// (祖先要素ですでにxmlnsが出力されていれば、子孫要素のxmlnsは出力時省略されます)
var a = new XElement((XNamespace)"http://www.w3.org/1999/xhtml" + "a",
new XAttribute("href", "http://example.com/"),
"test");
属性のセット
a.SetAttributeValue("href", "http://example.com");
テキストのセット
a.Value = "test"; // 追加の場合は a.Add(new XText("test"));
子要素の追加
var span = new XElement((XNamespace)"http://www.w3.org/1999/xhtml" + "span", "child text"); // <span>child text</span>
a.Add(span); // 末尾に追加
要素のパース
var a = XElement.Parse(@"<a href=""http://example.com"">test</a>"); // タグのパース
要素の検索
子孫も含めて要素を検索 (名前空間なし)
var aElements = doc.Descendants("a"); // 名前空間なしの<a>を取得
子孫も含めて要素を検索 (名前空間あり)
var aElements = doc.Descendants((XNamespace)"http://www.w3.org/1999/xhtml" + "a"); // XHTML名前空間の<a>を取得
XPath検索 (名前空間なし)
var aElements = doc.XPathSelectElements("//a[@href]", ns); // XPath検索 (href属性を持つ、名前空間なしの<a>)
※ using System.Xml.XPath;
が必要です。
XPath検索 (名前空間あり)
var ns = new XmlNamespaceManager(new NameTable());
ns.AddNamespace("h", "http://www.w3.org/1999/xhtml"); // XHTML名前空間の追加
var aElements = doc.XPathSelectElements("//h:a", ns); // XPath検索 (href属性を持つ、XHTML名前空間の<a>)