XNode.CreateReader Metod

Definition

Skapar en XmlReader för den här noden.

Överlagringar

Name Description
CreateReader()

Skapar en XmlReader för den här noden.

CreateReader(ReaderOptions)

Skapar en XmlReader med de alternativ som anges av parametern readerOptions .

CreateReader()

Skapar en XmlReader för den här noden.

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

Returer

En XmlReader som kan användas för att läsa den här noden och dess underordnade.

Exempel

Följande exempel skapar ett XML-träd, skapar ett XmlReader med hjälp CreateReader av metoden och skapar ett XmlDocument med hjälp av läsaren.

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)

Det här exemplet genererar följande utdata:

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

En annan användning för den här metoden är att göra en XSLT-transformering. Du kan skapa ett XML-träd, skapa ett XmlReader från XML-trädet, skapa ett nytt dokument och skapa ett XmlWriter som ska skriva till det nya dokumentet. Sedan kan du anropa XSLT-omvandlingen och skicka XmlReader och XmlWriter till transformeringen. När omvandlingen har slutförts fylls det nya XML-trädet i med resultatet av transformeringen.

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)

Det här exemplet genererar följande utdata:

<Root>
  <C1>Child1 data</C1>
  <C2>Child2 data</C2>
</Root>

Kommentarer

Du använder vanligtvis den här metoden när du måste ange en annan komponent med en XmlReader. Du kan till exempel skapa en XmlReader från ett LINQ till XML-träd och sedan skicka läsaren till Load.

Alla läsare som returneras av Create normaliserar läsarna. De utför alltid normalisering av radbrytningar och fullständig normalisering av attribut. Det som returneras av CreateReader är däremot XmlReader inte en normaliserande läsare. Det omvandlar inte något tomt utrymme. Den returnerar även attribut i den ordning som de lades till, inte i attributnamnsordning.

LINQ till XML behåller inte information om huruvida attribut är standardattribut. IsDefault returnerar alltid false oavsett om attributet har fyllts i från ett standardvärde eller inte.

Pseudoattributen PUBLIC och SYSTEMXDocumentType är inte tillgängliga via XmlReader.MoveToAttribute -metoden. De är endast tillgängliga via metoden XmlReader.GetAttribute som tar det kvalificerade namnet på attributet som en parameter. Om du måste hämta attributen PUBLIC eller SYSTEM bör du använda XmlReader.GetAttribute -metoden.

Base64- och BinHex-data stöds inte. Om du försöker hämta dessa typer av data (till exempel genom att anropa ReadElementContentAsBase64) genererar NotSupportedExceptionläsaren .

Deklarationen xml visas inte av läsaren. När du läser kommer du inte att stöta på en nod av typen XmlDeclaration.

Se även

Gäller för

CreateReader(ReaderOptions)

Skapar en XmlReader med de alternativ som anges av parametern readerOptions .

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

Parametrar

readerOptions
ReaderOptions

Ett ReaderOptions objekt som anger om du vill utelämna duplicerade namnområden.

Returer

Ett XmlReader objekt.

Gäller för