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


XPathNavigator в преобразованиях

Обновлен: November 2007

Класс XPathNavigator обеспечивает случайный доступ только для чтения и предназначен для использования в качестве входа в языке XSLT. Он реализован в XPathDocument, XmlDataDocument и XmlDocument. Класс XPathNavigator основан на модели данных консорциума World Wide Web Consortium (W3C), описанной в разделе 5 рекомендаций по языку XPath.

Класс XPathNavigator определяет модель курсора в любом хранилище и обеспечивает быстрые запросы XPath только для чтения к любому хранилищу данных. XPathNavigator также является классом, который используется для перебора фрагментов результирующего дерева.

API-интерфейс позволяет получить данные из текущего узла в хранилище и перейти в связанные узлы. XPathNavigator — модель стиля курсора, которая просматривает хранилище с помощью набора методов Move. XPathNavigator всегда размещается на узле. Любой неудачно примененный метод Move оставляет XPathNavigator без изменений.

XPathNavigator является классом, который используется для перебора фрагментов результирующего дерева. Следующий образец кода создает фрагмент результирующего дерева в таблице стилей путем вызова функции с параметром fragment, который содержит XML.

test.xsl

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl ="urn:schemas-microsoft-com:xslt"
                xmlns:user="https://www.adventure-works.com"
                version="1.0">

<xsl:variable name="fragment">
    <authorlist>
       <author>Joe</author>
    </authorlist>
</xsl:variable>

<msxsl:script language="C#" implements-prefix="user">
<![CDATA[
   string NodeFragment(XPathNavigator nav)
   {
      if (nav.HasChildren)
        return nav.Value;
      else
        return "";
   }
]]>
</msxsl:script>

<xsl:template match="/">
     <xsl:value-of select="user:NodeFragment($fragment)"/>
</xsl:template>

</xsl:stylesheet>

test.xml

<root>Some text</root>

Следующий код использует таблицу стилей test.xsl и входные данные test.xml.

Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Xsl
Imports System.Xml.XPath
Imports System.Text
Public Class sample

    Public Shared Sub Main()
        Dim xslt As New XslTransform()
        xslt.Load("test.xsl")

        Dim xd As New XPathDocument("test.xml")

        Dim strmTemp = New FileStream("out.xml", FileMode.Create, FileAccess.ReadWrite)
        xslt.Transform(xd, Nothing, strmTemp, Nothing)
    End Sub 'Main
End Class 'sample
using System;
using System.IO;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;
using System.Text;

public class sample
{
    public static void Main()
    {
        XslTransform xslt = new XslTransform();
        xslt.Load("test.xsl");

        XPathDocument xd = new XPathDocument("test.xml");

        Stream strmTemp = new FileStream("out.xml", FileMode.Create, FileAccess.ReadWrite);
        xslt.Transform(xd, null, strmTemp, null);
    }
}

Результат

Результат преобразования находится в файле out.xml:

<?xml version="1.0" encoding="utf-8"?>Joe

См. также

Основные понятия

Реализация классом XslTransform XSLT-процессора