Extensions.CreateNavigator Method

Definition

Creates an XPathNavigator for an XNode.

Overloads

CreateNavigator(XNode)

Creates an XPathNavigator for an XNode.

CreateNavigator(XNode, XmlNameTable)

Creates an XPathNavigator for an XNode. The XmlNameTable enables more efficient XPath expression processing.

Remarks

You cannot edit the XML tree by using the XPathNavigator that's returned by this method. The CanEdit property returns false.

You cannot create an XPathNavigator for a XDocumentType node. Document types do not participate in the XPath data model.

Namespace declarations are reported from left to right. In contrast, for XmlDocument, namespaces are reported from right to left. This is conformant behavior because namespace declarations are not ordered in the XPath data model.

The method MoveToId is not supported for navigators that are returned by this method.

You can use this method to perform an XSLT transformation. You can create an XML tree, create an XPathNavigator from the XML tree, create a new document, and create a XmlWriter that will write into the new document. Then, you can invoke the XSLT transformation, passing the XPathNavigator and XmlWriter to the transformation. After the transformation successfully completes, the new XML tree is populated with the results of the transformation.

To perform an XSLT transformation, you can use either an XmlReader or an XPathNavigator. The two approaches have different performance characteristics. Some transformations will execute faster when using an XmlReader, and others will execute faster when using a XPathNavigator. If performance is a concern, we recommend that you experiment with each approach to determine which will perform better in your circumstances.

CreateNavigator(XNode)

Creates an XPathNavigator for an XNode.

public:
[System::Runtime::CompilerServices::Extension]
 static System::Xml::XPath::XPathNavigator ^ CreateNavigator(System::Xml::Linq::XNode ^ node);
public static System.Xml.XPath.XPathNavigator CreateNavigator (this System.Xml.Linq.XNode node);
static member CreateNavigator : System.Xml.Linq.XNode -> System.Xml.XPath.XPathNavigator
<Extension()>
Public Function CreateNavigator (node As XNode) As XPathNavigator

Parameters

node
XNode

An XNode that can process XPath queries.

Returns

An XPathNavigator that can process XPath queries.

Examples

using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;
using System.Xml.Xsl;

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(
    new XElement("Parent",
        new XElement("Child1", "Child1 data"),
        new XElement("Child2", "Child2 data")
    )
);

XDocument newTree = new();
using (XmlWriter writer = newTree.CreateWriter())
{
    // Load the style sheet.  
    XslCompiledTransform xslt = new();
    xslt.Load(XmlReader.Create(new StringReader(xslMarkup)));

    // Execute the transform and output the results to a writer.  
    xslt.Transform(xmlTree.CreateNavigator(), 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 transform and output the results to a writer.  
    xslt.Transform(xmlTree.CreateNavigator(), writer)  
End Using  

Console.WriteLine(newTree)  

This example produces the following output:

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

Remarks

You cannot edit the XML tree by using the XPathNavigator that is returned by this method. The CanEdit property returns false.

You cannot create an XPathNavigator for a XDocumentType node. Document types do not participate in the XPath data model.

Namespace declarations are reported from left to right. In contrast, for XmlDocument namespaces are reported from right to left. This is conformant behavior because namespace declarations are not ordered in the XPath data model.

The method MoveToId is not supported for navigators that are returned by this method.

You can use this method to perform an XSLT transformation. You can create an XML tree, create an XPathNavigator from the XML tree, create a new document, and create a XmlWriter that will write into the new document. Then, you can invoke the XSLT transformation, passing the XPathNavigator and XmlWriter to the transform. After the transformation successfully completes, the new XML tree is populated with the results of the transformation.

To perform an XSLT transformation, you can use either an XmlReader or an XPathNavigator. The two approaches have different performance characteristics. Some transformations will execute faster when using an XmlReader, and others will execute faster when using a XPathNavigator. If performance is a concern, we recommend that you experiment with each approach to determine which will perform better in your circumstances.

Applies to

CreateNavigator(XNode, XmlNameTable)

Creates an XPathNavigator for an XNode. The XmlNameTable enables more efficient XPath expression processing.

public:
[System::Runtime::CompilerServices::Extension]
 static System::Xml::XPath::XPathNavigator ^ CreateNavigator(System::Xml::Linq::XNode ^ node, System::Xml::XmlNameTable ^ nameTable);
public static System.Xml.XPath.XPathNavigator CreateNavigator (this System.Xml.Linq.XNode node, System.Xml.XmlNameTable? nameTable);
public static System.Xml.XPath.XPathNavigator CreateNavigator (this System.Xml.Linq.XNode node, System.Xml.XmlNameTable nameTable);
static member CreateNavigator : System.Xml.Linq.XNode * System.Xml.XmlNameTable -> System.Xml.XPath.XPathNavigator
<Extension()>
Public Function CreateNavigator (node As XNode, nameTable As XmlNameTable) As XPathNavigator

Parameters

node
XNode

An XNode that can process an XPath query.

nameTable
XmlNameTable

A XmlNameTable to be used by XPathNavigator.

Returns

An XPathNavigator that can process XPath queries.

Remarks

You cannot edit the XML tree using the XPathNavigator that is returned by this method. The CanEdit property returns false.

You cannot create an XPathNavigator for a XDocumentType node. Document types do not participate in the XPath data model.

Namespace declarations are reported from left to right. In contrast, for XmlDocument namespaces are reported from right to left. This is conformant behavior because namespace declarations are not ordered in the XPath data model.

The method MoveToId is not supported for navigators that are returned by this method.

If you use an XmlNameTable with this method to create the XPathNavigator, you will get better performance when evaluating XPath expressions.

Applies to