Xml 模板匹配和文档

Xml 模板匹配和文档,xml,xslt,Xml,Xslt,我可以这样做来显示节点的值吗 <!-- plop.xml : --> <?xml version="1.0"?> <root> <node1>hello</node1> </root> <xsl:template name="my_template" match="document('plop.xml')/root" > <xsl:value-of select="node1"/

我可以这样做来显示节点的值吗

<!-- plop.xml : -->
<?xml version="1.0"?>
<root>
      <node1>hello</node1>
</root>

<xsl:template name="my_template" match="document('plop.xml')/root" >
       <xsl:value-of select="node1"/>
</xsl:template>

 <xsl:call-template name="my_template"></xsl:call-template>

你好
我想创建只影响一个xml的特殊模板。

我在asp.net 2.0 C#XslCompiledTransform处理器上工作。

不,你不能那样做。(编辑:至少在XSLT 1.0中,请参阅以了解在XSLT 2.0中进行编辑的方法。)

XML节点没有存储它的文件的概念,因为XML首先不一定对应于实际的文件。因此,您不能编写只与特定文件中的节点匹配的模板

您可以声明一个参数

<xsl:param name="fileName" select="''" />

从C#程序中填充一个您选择的值,然后根据该参数的值使XSLT程序的行为有所不同:

<xsl:template match="root">
  <xsl:choose>
    <xsl:when test="$fileName = 'plop.xml'">
      <!-- do something -->
    </xsl:when>
    <xsl:otherwise>
      <!-- do something else -->
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

在XSLT/XPath 2.0中,您可以:

<xsl:template match="/root[document-uri(.) eq resolve-uri('plop.xml',.)]">
        <xsl:value-of select="node1"/>
</xsl:template> 


您编写的XML节点没有存储文件的概念,但它有URI的概念,因此它知道其文档URI(仅在XPath/XSLT 2.0中可访问)。另外,请记住XSLT1.0中的模式不能有变量/参数引用。@Alejandro:ASP.NET 2.0 C#
XslCompiledTransform
不能执行XSLT2.0。但有趣的是,您可以在那里检索文档URI,我不知道(顺便说一句:如果文档只是内存中的对象,URI会是什么?)。你对模式的理解是正确的,我删除了错误的示例。你对你的担心是正确的:如果没有uri,可能会有资源。
resolve-uri()?我想现在的环境目录是什么?@Tomalak:很好。我使用
解析uri
只是为了说明
'plop.xml'
不是完整的uri。我想这个案子可以用p/2表格。