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表格。