XNode.CreateReader 方法

定義

建立這個節點的 XmlReader

多載

CreateReader()

建立這個節點的 XmlReader

CreateReader(ReaderOptions)

使用 readerOptions 參數指定的選項建立 XmlReader

CreateReader()

建立這個節點的 XmlReader

public:
 System::Xml::XmlReader ^ CreateReader();
public System.Xml.XmlReader CreateReader ();
member this.CreateReader : unit -> System.Xml.XmlReader
Public Function CreateReader () As XmlReader

傳回

XmlReader

XmlReader,可用於讀取這個節點及其子代 (Descendant)。

範例

下列範例會建立 XML 樹狀結構、使用 CreateReader 方法建立 XmlReader ,並使用讀取器建立 XmlDocument

XDocument xmlTree = new XDocument(  
    new XElement("Root",  
        new XAttribute("Att1", "Attribute Content"),  
        new XElement("Child1", 1),  
        new XElement("Child2", 2)  
    )  
);  
XmlReader reader = xmlTree.CreateReader();  
reader.MoveToContent();  
XmlDocument doc = new XmlDocument();  
XmlNode cd = doc.ReadNode(reader);  
doc.AppendChild(cd);  
Console.WriteLine(doc.OuterXml);  
Dim xmlTree As XDocument =  _   
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>  
        <Root Att1="Attribute Content">  
            <Child1>1</Child1>  
            <Child2>2</Child2>  
        </Root>  
Dim reader As XmlReader = xmlTree.CreateReader()  
reader.MoveToContent()  
Dim doc As XmlDocument = New XmlDocument()  
Dim cd As XmlNode = doc.ReadNode(reader)  
doc.AppendChild(cd)  
Console.WriteLine(doc.OuterXml)  

這個範例會產生下列輸出:

<Root Att1="Attribute Content"><Child1>1</Child1><Child2>2</Child2></Root>  

此方法的另一個用途是執行 XSLT 轉換。 您可以建立 XML 樹狀結構、從 XML 樹狀結構建立 XmlReader、建立新文件,然後建立將寫入新文件中的 XmlWriter。 然後,您可以叫用 (Invoke) 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 transform 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 XElement = _   
        <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 transform 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>  

備註

當您必須使用 提供另一個 XmlReader 元件時,通常會使用這個方法。 例如,您可以從LINQ to XML樹狀結構建立 XmlReader ,然後將該讀取器傳遞至 Load

Create 回的所有讀取器都會正規化讀取器。 它們一律會執行分行符號正規化和屬性的完整正規化。 相反地, XmlReader 傳回的 CreateReader 不是正規化讀取器。 它不會轉換任何空白字元。 它也會依新增的順序傳回屬性,而不是以屬性名稱順序傳回屬性。

LINQ to XML不會保留屬性是否為預設屬性的相關資訊。 IsDefault 不論屬性是否從預設值填入,都會傳回 false。

上的 PUBLIC XDocumentTypeSYSTEM 虛擬屬性無法透過 XmlReader.MoveToAttribute 方法取得。 它們只能透過 XmlReader.GetAttribute 接受屬性限定名稱做為參數的方法使用。 如果您必須擷取 PUBLICSYSTEM 屬性,您應該使用 XmlReader.GetAttribute 方法。

不支援 Base64 和 BinHex 資料。 例如,如果您嘗試擷取這些類型的資料 (,例如呼叫 ReadElementContentAsBase64) ,讀取器會擲回 NotSupportedException

讀取 xml 器不會顯示宣告。 讀取時,您不會遇到 類型 XmlDeclaration 為 的節點。

另請參閱

適用於

CreateReader(ReaderOptions)

使用 readerOptions 參數指定的選項建立 XmlReader

public:
 System::Xml::XmlReader ^ CreateReader(System::Xml::Linq::ReaderOptions readerOptions);
public System.Xml.XmlReader CreateReader (System.Xml.Linq.ReaderOptions readerOptions);
member this.CreateReader : System.Xml.Linq.ReaderOptions -> System.Xml.XmlReader
Public Function CreateReader (readerOptions As ReaderOptions) As XmlReader

參數

readerOptions
ReaderOptions

ReaderOptions 物件,指定是否要省略重複的命名空間。

傳回

XmlReader

XmlReader 物件。

適用於