如何在下面的示例中显示Hola?现在,它正在返回Hello。
xml
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="nodevariable.xslt"?> <!--todo: change this if copying to new file-->
<!--todo: change preceding line if copying to new file-->
<greetings>
<greeting id="1">
<can>
<be>
<a>
<long itemNo="1">
<path>Hello</path>
</long>
<long itemNo="2">
<path>World</path>
</long>
</a>
</be>
</can>
</greeting>
<greeting id="2">
<can>
<be>
<a>
<long itemNo="1">
<path>Hola</path>
</long>
<long itemNo="2">
<path>Mundo</path>
</long>
</a>
</be>
</can>
</greeting>
</greetings>
xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="greetings">
<xsl:apply-templates select="greeting[@id > 1]"/>
</xsl:template>
<xsl:variable name="testVar" select="/greetings/greeting/can/be/a/long[@itemNo=1]" />
<xsl:template match="greeting">
<html>
<body>
<h1>
<xsl:value-of select="$testVar/path"/>
</h1>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
您可以将testVar
声明移到模板中并相对于当前位置使用它来完成此操作。
如你所知,testVar
只是评估所有具有该路径的节点,其中有两个。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="greetings">
<xsl:apply-templates select="greeting[@id > 1]"/>
</xsl:template>
<xsl:template match="greeting">
<xsl:variable name="testVar" select="can/be/a/long[@itemNo=1]" />
<html>
<body>
<h1>
<xsl:value-of select="$testVar/path"/>
</h1>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
仅供参考,如果您想访问节点集中的第二项,可以使用[2]
来执行此操作:$testVar[2]/path
,但在您的示例中这样做会破坏使用模板的目的。