HOW TO:使用 XmlWriter 填入 XML 樹狀結構 (LINQ to XML)
更新: November 2007
填入 XML 樹狀結構的其中一種方式是使用 CreateWriter 來建立 XmlWriter,然後寫入到 XmlWriter 中。XML 樹狀結構會以寫入到 XmlWriter 的所有節點填入。
當您使用 LINQ to XML 搭配預期寫入 XmlWriter 的其他類別 (例如,XslCompiledTransform) 時,您通常會使用這個方法。
範例
CreateWriter 的其中一個可能的使用時機為叫用 XSLT 轉換時。這個範例會建立 XML 樹狀結構、從 XML 樹狀結構建立 XmlReader、建立新文件,然後建立 XmlWriter 來寫入新文件。接著,它會叫用 XSLT 轉換,以傳入至 XmlReader 和 XmlWriter。轉換成功完成後,系統會使用轉換的結果填入新的 XML 樹狀結構。
string xslMarkup = @"<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:template match='/Parent'>
<Root>
<C1>
<xsl:value-of select='Child1'/>
</C1>
<C2>
<xsl:value-of select='Child2'/>
</C2>
</Root>
</xsl:template>
</xsl:stylesheet>";
XDocument xmlTree = new XDocument(
new XElement("Parent",
new XElement("Child1", "Child1 data"),
new XElement("Child2", "Child2 data")
)
);
XDocument newTree = new XDocument();
using (XmlWriter writer = newTree.CreateWriter())
{
// Load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(XmlReader.Create(new StringReader(xslMarkup)));
// Execute the transformation and output the results to a writer.
xslt.Transform(xmlTree.CreateReader(), writer);
}
Console.WriteLine(newTree);
Dim xslMarkup As XDocument = _
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:template match='/Parent'>
<Root>
<C1>
<xsl:value-of select='Child1'/>
</C1>
<C2>
<xsl:value-of select='Child2'/>
</C2>
</Root>
</xsl:template>
</xsl:stylesheet>
Dim xmlTree As XDocument = _
<?xml version='1.0'?>
<Parent>
<Child1>Child1 data</Child1>
<Child2>Child2 data</Child2>
</Parent>
Dim newTree As XDocument = New XDocument()
Using writer As XmlWriter = newTree.CreateWriter()
' Load the style sheet.
Dim xslt As XslCompiledTransform = New XslCompiledTransform()
xslt.Load(xslMarkup.CreateReader())
' Execute the transformation and output the results to a writer.
xslt.Transform(xmlTree.CreateReader(), writer)
End Using
Console.WriteLine(newTree)
此範例會產生下列輸出:
<Root>
<C1>Child1 data</C1>
<C2>Child2 data</C2>
</Root>