我只需要覆盖 xsl
中的变量。
Example:
x=0
if x=0
then
x=3
我需要改变变量的值。
我对xsl非常陌生,请帮助我如何实现这个。这可能很傻,但我没有任何想法...
我只需要覆盖 xsl
中的变量。
Example:
x=0
if x=0
then
x=3
我需要改变变量的值。
我对xsl非常陌生,请帮助我如何实现这个。这可能很傻,但我没有任何想法...
正如其他评论所指出的,XSLT中的变量一旦设置就无法修改。我发现最简单的方法是将变量嵌套在彼此之内。
<xsl:variable name="initial_condition" select="VALUE"/>
稍后
<xsl:variable name="modified_condition" select="$initial_condition + MODIFIER"/>
我们的一些XSL文件中有大量嵌套计算,这些计算实际上应该在生成源XML的业务逻辑中。由于曾经一段时间内没有开发人员/时间添加此业务逻辑,因此将其作为演示层的一部分添加了进来。
像这样的代码非常难以维护,特别是考虑到您可能需要进行控制流程的考虑。变量名称变得非常复杂,可读性急剧下降。这样的代码应该是最后的选择,它并不是XSLT设计的主要目的。
我只需要在xsl中覆盖变量
例如,如果x=0,则x=3
XSLT是一种函数式语言,在其他方面,这意味着一旦定义的变量就不能更改。
当然,这个事实并不意味着一个特定的问题不能使用XSLT来解决——只是解决方案不包含任何变量值的修改,一旦被定义了。
告诉我们你的具体问题,很多人都能提供XSLT解决方案 :)
xslt
中的<xsl:variable>
实际上不是一个变量。这意味着在定义后它不能被更改,并且可以像这样使用:
假设我们有一个名为test.xml
的xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<client-list>
<client>
<name>person1</name>
</client>
<client>
<name>person2</name>
</client>
<client>
<name>person3</name>
</client>
</client-list>
我们想将其转换为类似于 CSV(逗号分隔值)的格式,但是将 person1
替换为一个名为 person4
的隐藏人物。然后假设我们有一个名为 test.xsl
的 XML 文件,它将用于转换 test.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="hiddenname">person4</xsl:variable>
<!-- this template is for the root tag client-list of the test.xml -->
<xsl:template match="/client-list">
<!-- for each tag with name client you find, ... -->
<xsl:for-each select="client">
<!-- if the tag with name -name- don't have the value person1 just place its data, ... -->
<xsl:if test="name != 'person1'">
<xsl:value-of select="name"/>
</xsl:if>
<!-- if have the value person1 place the data from the hiddenperson -->
<xsl:if test="name = 'person1'">
<xsl:value-of select="$hiddenname"/>
</xsl:if>
<!-- and place a comma -->
<xsl:text>,</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
结果将会是:
person4,person2,person3,
希望这能对您有所帮助。