我有一个带变量和参数的xsl文件。参数在另一个xml文件中定义:
<fo:block><xsl:value-of select="root/period"/></fo:block>
并且参数的值为:
<root>
<period>1-5</period>
</root>
现在,有时我想要显示包含句号的块,有时我不想。我怎样才能做到这一点?这是我尝试的方式:
<xsl:variable name="cond" select="root/cond"/>
<xsl:if test="$cond='1'">
<fo:block><xsl:value-of select="root/period"/></fo:block>
</xsl:if>
参数:
<root>
<cond>1</cond>
<period>1-5</period>
</root>
这不起作用!
我使用<xsl:copy-of select="$cond" />
显示了变量的值,它是空的。
更新
我现在知道问题是什么:
XSL-FO:
<fo:flow flow-name="xsl-region-body">
<fo:block>
test
</fo:block>
<fo:block>
<xsl:variable name="cond" select=root/cond/>
<xsl:copy-of select="$cond" />
</fo:block>
<fo:block>
<xsl:value-of select="root/period"/>
</fo:block>
</fo:flow>
参数:
<root>
<cond>haha</cond>
<period>01.01.2013 – 31.12.2013</period>
</root>
输出:
测试 01.01.2013 - 2013年12月31日
所以问题是:如何从xml参数中选择一个值并将值赋给xsl变量?
答案 0 :(得分:1)
有几件事。
首先,您展示的更新的XSL-FO格式不正确:
<xsl:variable name="cond" select=root/cond/>
select属性值需要它周围的引号:
<xsl:variable name="cond" select="root/cond" />
我认为这不是真正的问题,因为如果是这样的话,你根本就没有输出,只是一个错误。
但我认为你真正的问题在于你说的话
<xsl:copy-of select="$cond" />
由于您使用的是copy-of而不是value-of,因此会将$ cond变量中的节点复制到输出中。因此,您的输出FO将包含元素<cond>haha</cond>
。
我不知道FO处理器应该用这样的元素做什么,这些元素没有命名空间。显然,输出文本内容并不是它的作用;它可能会忽略它们。
尝试将该副本更改为value-of:
<xsl:value-of select="$cond" />
这会将haha
放入输出中,而不会有<cond>
元素。
试试这个,如果它没有达到您的预期,请告诉我们
答案 1 :(得分:-2)
这是解决方案:
<xsl:variable name="firstLine">
<xsl:value-of select="root/firstLine"/>
</xsl:variable>
你是如何从参数(xml)获得值的。