我可以这样做以显示节点的值吗?
<!-- 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处理器上工作。
答案 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>