Поделиться через


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)

Исходный код:
XNodeNavigator.cs
Исходный код:
XNodeNavigator.cs
Исходный код:
XNodeNavigator.cs
Исходный код:
XNodeNavigator.cs
Исходный код:
XNodeNavigator.cs

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 , который может обрабатывать запросы 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)

Исходный код:
XNodeNavigator.cs
Исходный код:
XNodeNavigator.cs
Исходный код:
XNodeNavigator.cs
Исходный код:
XNodeNavigator.cs
Исходный код:
XNodeNavigator.cs

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 , который может обрабатывать запросы XPath.

Комментарии

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

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

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

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

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

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