XPathNavigator 类提供对数据的只读随机访问,旨在用作 XSLT 的输入。它在 XPathDocument、XmlDataDocument 和 XmlDocument 上实现。XPathNavigator 基于 XML 路径语言 (XPath) 建议第 5 节中所描述的 W3C 数据模型。
XPathNavigator 定义一个适用于任何存储区的游标模型,并提供对任何数据存储区的快速、只读 XPath 查询。XPathNavigator 还是用来在结果树片段上迭代的类。
API 使您能够从存储区的当前节点中获取信息,并移动到连接的节点。XPathNavigator 是使用 Move 方法集在存储区上执行遍历的游标样式模型。XPathNavigator 总是定位在节点上。任何失败的 Move 方法都不会改变 XPathNavigator。
XPathNavigator 是用于循环访问节点片段的类。下面的代码示例通过调用带参数 fragment(包含 XML)的函数,在样式表中创建一个结果树片段。
test.xsl
[Visual Basic, C#]
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl ="urn:schemas-microsoft-com:xslt"
xmlns:user="http://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
[Visual Basic, C#]
<root>Some text</root>
下面的代码使用 test.xsl 样式表和 test.xml 输入数据。
[C#]
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 中可以看到转换结果:
输出 (out.xml)
[Visual Basic, C#]
<?xml version="1.0" encoding="utf-8"?>Joe
浙公网安备 33010602011771号