3

変数を上書きするだけですxsl

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

変数の値を変更する必要があります。

私はxslに非常に慣れていません。これを達成する方法を教えてください。これはばかげているかもしれませんが、私にはわかりません..

4

3 に答える 3

3

xslの変数を上書きする必要があります

例x=0 if x = 0 then 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は実際の変数ではありません。つまり、定義後に変更することはできず、次のように使用できます。

name のこの 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ます。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,

これがお役に立てば幸いです。

于 2012-10-30T01:09:55.590 に答える