3

我只需要覆盖变量xsl

Example:
x=0
if x=0
then
x=3

我需要更改变量的值。

我对 xsl 很陌生,请帮助我如何实现这一点。这可能很愚蠢,但我不知道..

4

3 回答 3

3

我只需要覆盖 xsl 中的变量

示例 x=0 如果 x=0 则 x=3

XSLT 是一种函数式语言,除其他外,这意味着变量一旦定义就无法更改。

当然,这个事实并不意味着给定的问题不能使用 XSLT 解决——只是解决方案不包含对变量值的任何修改,一旦定义。

告诉我们您的具体问题是什么,许多人将能够提供 XSLT 解决方案 :)

于 2012-10-29T22:31:18.643 回答
2

正如其他评论所指出的,XSLT 中的变量一旦设置就无法修改。我发现这样做的最简单方法是将变量相互嵌套。

<xsl:variable name="initial_condition" select="VALUE"/>

之后

<xsl:variable name="modified_condition" select="$initial_condition + MODIFIER"/>

我们的一些 xsl 有大量的嵌套计算,它们确实应该在生成源 XML 的业务逻辑中。由于有一段时间没有开发人员/时间来添加这个业务逻辑,所以它被添加为表示层的一部分。

维护这样的代码变得非常困难,特别是考虑到您可能需要考虑控制流。变量名称最终变得非常复杂,可读性下降。像这样的代码应该是最后的手段,它并不是 XSLT 的真正设计目的。

于 2012-10-30T09:11:41.030 回答
1

<xsl:variable>inxslt不是实际的变量。这意味着它在定义后无法更改,您可以像这样使用它:

假设我们有这个带有名称的 xml test.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带有 name 的隐藏人员person4。然后假设我们有这个带有名称的 xml test.xsl,它将用于转换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,

我希望这能帮到您。

于 2012-10-30T01:09:55.590 回答