覆盖XSL中的变量



我只需要覆盖 xsl

中的变量
Example:
x=0
if x=0
then
x=3

我需要更改变量的值。

我是XSL的新手,请帮助我如何实现这一目标。这可能很愚蠢,但我没有任何想法。

我只需要覆盖xsl

中的变量

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

XSLT是一种功能性语言,除其他方面,这意味着一旦定义的变量无法更改。

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

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

正如其他注释所指出的那样,设置XSLT中的变量无法修改。我发现这样做的最简单方法是彼此嵌套变量。

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

后来

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

我们的某些XSL具有嵌套计算的整个序列,这些计算实际上应该是在产生源XML的业务逻辑中。由于没有开发人员/时间添加此业务逻辑的时间,因此将其作为演示层的一部分添加。

这样很难维护这样的代码,尤其是考虑到您可能有控制流动的注意事项。变量名称最终是非常复杂的,并且可读性在地板上下降。像这样的代码应该是最后的手段,它并不是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的(逗号分隔值),但用名称person4的隐藏人员代替person1。然后说我们有名称test.xsl的XML,该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,

我希望这对您有帮助。

相关内容

  • 没有找到相关文章

最新更新