模板匹配和文档

时间:2011-01-05 13:40:54

标签: 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"/>
</xsl:template>

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

我想创建一个只影响一个xml的特殊模板 我在asp .net 2.0 C#XslCompiledTransform处理器上工作。

2 个答案:

答案 0 :(得分:1)

不,你不能这样做。 (编辑:至少在XSLT 1.0中,请参阅@Alejandro's answer了解在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>

答案 1 :(得分:1)

在XSLT / XPath 2.0中,您可以:

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