方法 : XmlWriter を使用して XML ツリーを設定する (LINQ to XML)

更新 : November 2007

XML ツリーを設定する方法の 1 つは、CreateWriter を使用して XmlWriter を作成し、この XmlWriter に書き込みを行うことです。XML ツリーには、XmlWriter に書き込まれたすべてのノードが挿入されます。

通常この方法は、LINQ to XML と、XmlWriter への書き込みを必要とする別のクラス (XslCompiledTransform など) を併用する場合に使用します。

使用例

CreateWriter は、XSLT 変換を呼び出すときに使用できます。この例では、XML ツリーを作成し、この XML ツリーから XmlReader を作成して、新しいドキュメントを作成します。次に、この新しいドキュメントに書き込むために XmlWriter を作成します。次に、XSLT 変換を呼び出して、XmlReaderXmlWriter を渡します。変換が正常に完了すると、新しい 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>

参照

概念

XML ツリーの作成

参照

CreateWriter

XmlWriter

XslCompiledTransform