您的位置:首页 > 其它

转换中的 XPathNavigator给脚本执行传递参数

2004-11-22 15:52 375 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: