Extensions.CreateNavigator Метод

Определение

Создает XPathNavigator для XNode.

Перегрузки

CreateNavigator(XNode)

Создает XPathNavigator для XNode.

CreateNavigator(XNode, XmlNameTable)

Создает XPathNavigator для XNode. XmlNameTable обеспечивает более эффективную обработку выражений XPath.

Комментарии

Xml-дерево нельзя изменить с помощью XPathNavigator возвращаемого этим методом. Свойство CanEdit возвращает значение false.

Невозможно создать XPathNavigator узел XDocumentType . Типы документов не участвуют в модели данных XPath.

Объявления пространств имен передаются слева направо. В отличие от этого, XmlDocumentпространства имен передаются справа налево. Это поведение соответствует требованиям, так как объявления пространств имен не упорядочены в модели данных XPath.

Метод MoveToId не поддерживается для навигаторов, возвращаемых этим методом.

Этот метод можно использовать для выполнения преобразования XSLT. Вы можете создать XML-дерево, создать XPathNavigator его из XML-дерева, создать новый документ и создать документ XmlWriter , который будет записываться в новый документ. После этого можно вызвать преобразование XSLT, передавая XPathNavigator и XmlWriter этой трансформации. После успешного завершения преобразования новое XML-дерево заполняется ее результатами.

Для выполнения преобразования XSLT можно использовать одно XmlReader или несколько XPathNavigator. Два подхода имеют разные характеристики производительности. Некоторые преобразования будут выполняться быстрее при использовании, XmlReaderа другие будут выполняться быстрее при использовании XPathNavigator. Если производительность является проблемой, рекомендуется поэкспериментировать с каждым подходом, чтобы определить, что будет лучше в ваших обстоятельствах.

CreateNavigator(XNode)

Создает XPathNavigator для 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

Параметры

node
XNode

Объект XNode, который может обрабатывать запросы XPath.

Возвращаемое значение

XPathNavigator

Объект XPathNavigator, который может обрабатывать запросы XPath.

Примеры

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)  

В этом примере выводятся следующие данные:

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

Комментарии

Xml-дерево нельзя изменить с помощью XPathNavigator возвращаемого этим методом. Свойство CanEdit возвращает значение false.

Невозможно создать XPathNavigator узел XDocumentType . Типы документов не участвуют в модели данных XPath.

Объявления пространств имен передаются слева направо. В отличие от этого, для XmlDocument пространств имен передаются справа налево. Это поведение соответствует требованиям, так как объявления пространств имен не упорядочены в модели данных XPath.

Метод MoveToId не поддерживается для навигаторов, возвращаемых этим методом.

Этот метод можно использовать для выполнения преобразования XSLT. Вы можете создать XML-дерево, создать XPathNavigator его из XML-дерева, создать новый документ и создать документ XmlWriter , который будет записываться в новый документ. Затем можно вызвать преобразование XSLT, передавая XPathNavigator преобразование и XmlWriter в преобразование. После успешного завершения преобразования новое XML-дерево заполняется ее результатами.

Для выполнения преобразования XSLT можно использовать одно XmlReader или несколько XPathNavigator. Два подхода имеют разные характеристики производительности. Некоторые преобразования будут выполняться быстрее при использовании, XmlReaderа другие будут выполняться быстрее при использовании XPathNavigator. Если производительность является проблемой, рекомендуется поэкспериментировать с каждым подходом, чтобы определить, что будет лучше в ваших обстоятельствах.

Применяется к

CreateNavigator(XNode, XmlNameTable)

Создает XPathNavigator для XNode. XmlNameTable обеспечивает более эффективную обработку выражений XPath.

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

Параметры

node
XNode

XNode, который может обработать запрос XPath.

nameTable
XmlNameTable

XmlNameTable для использования XPathNavigator.

Возвращаемое значение

XPathNavigator

Объект XPathNavigator, который может обрабатывать запросы XPath.

Комментарии

Невозможно изменить XML-дерево с помощью XPathNavigator возвращаемого этим методом. Свойство CanEdit возвращает значение false.

Невозможно создать XPathNavigator узел XDocumentType . Типы документов не участвуют в модели данных XPath.

Объявления пространств имен передаются слева направо. В отличие от этого, для XmlDocument пространств имен передаются справа налево. Это поведение соответствует требованиям, так как объявления пространств имен не упорядочены в модели данных XPath.

Метод MoveToId не поддерживается для навигаторов, возвращаемых этим методом.

Если вы используете XmlNameTable этот метод для создания XPathNavigator, вы получите лучшую производительность при оценке выражений XPath.

Применяется к