我只需要覆盖xsl
Example:
x=0
if x=0
then
x=3
我需要更改变量的值。
我是xsl的新手,请帮我解决这个问题。这可能很傻但我不知道..
答案 0 :(得分:3)
我只需要覆盖xsl
中的变量示例x = 0如果x = 0则x = 3
XSLT是一种函数式语言,除此之外,这意味着一旦定义了变量就无法更改。
当然,这个事实并不意味着使用XSLT无法解决给定的问题 - 只是解决方案在定义后不包含对变量值的任何修改。
告诉我们您的具体问题是什么,许多人将能够提供XSLT解决方案:)
答案 1 :(得分:1)
正如其他评论所指出的那样,XSLT中的变量一旦设置就无法修改。我发现这样做的最简单方法是将变量嵌套在彼此中。
<xsl:variable name="initial_condition" select="VALUE"/>
后来
<xsl:variable name="modified_condition" select="$initial_condition + MODIFIER"/>
我们的一些xsl拥有完整的嵌套计算,这些计算实际上应该在生成源XML的业务逻辑中。由于没有开发人员/时间添加此业务逻辑的一段时间,它被添加为表示层的一部分。
维护这样的代码变得非常困难,特别是考虑到你可能需要考虑控制流程。变量名称最终变得非常复杂,并且可读性在地板上下降。像这样的代码应该是最后的手段,它并不是XSLT的设计目的。
答案 2 :(得分:0)
<xsl:variable>
中的xslt
不是实际的变量。这意味着在您定义它之后无法更改它,您可以像这样使用它:
假设我们有一个名为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,
我希望这会对你有所帮助。