0
<xsl:choose>
  <xsl:when test="type='LEVEL'">
    <xsl:variable name="myVar" select = "value"/>
      <xsl:variable name="spaces" select = "'&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0'"/>
      <xsl:value-of select="substring($spaces, 1, $myVar)"/>
   </xsl:when>

XSLTに上記のコードがあります。myVarは、(1または2または3)のような値を持つ変数です。次のコード行の出力を変数に格納し、when条件の外で使用する必要があります。

xsl:value-of select="substring($spaces, 1, $myVar)"/

現在、できません。誰かが何かを提案できますか?

4

2 に答える 2

0

できません。when条件の外側で変数を宣言するか(宣言内の一部のXPathが失敗してnullを返す場合でも)、when条件の内側で出力を使用できます。しかし、とにかく出力を使用したいのに、なぜchooseを使用するのですか?最後の試みは、変数を宣言し、そのシーケンスコンストラクター内でchooseを使用することです。次のようになります。

<!-- You declare the 'tool' variables alone -->
<xsl:variable name="myVar" select = "value"/>
<xsl:variable name="spaces" select = "'&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0'"/>

<!-- For myVarSub you use a sequence constructor instead of the select way -->
<xsl:variable name="myVarSub">      
    <xsl:choose>
       <xsl:when test="type='LEVEL'">    
            <!-- xsl:sequence create xml node -->
            <xsl:sequence select="substring($spaces, 1, $myVar)"/>
       </xsl:when>
    <xsl:choose>
</xsl:variable>

その後、必要に応じて変数を出力または使用します。他のwhen条件を追加しない場合、テストがfalseのときにmyVarはnullになります。ただし、xsl:sequenceのため、これはxslt2.0ソリューションであることに注意してください。

于 2013-03-26T08:11:58.413 に答える
0

あなたが何をしようとしているのかわかりませんが、次のことを試すことができます。ソースXML:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<Result>
<resultDetails>
    <resultDetailsData>
        <itemProperties>
            <ID>1</ID>
            <type>LEVEL</type> 
            <value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:int">5</value> 
        </itemProperties>
    </resultDetailsData>
</resultDetails>
</Result>

このXSLTを適用します。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">


<xsl:template match="itemProperties">
    <xsl:variable name="fromOutputTemplate">
        <xsl:call-template name="output"/>  
    </xsl:variable>
    <out>
        <xsl:value-of select="$fromOutputTemplate"/>    
    </out>          
</xsl:template>

<xsl:template name="output">
    <xsl:variable name="spaces" select = "'&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;'"/>
    <xsl:variable name="myVar" select = "value"/>
    
    <xsl:choose>
        <xsl:when test="type='LEVEL'">
                <xsl:value-of select="substring($spaces, 1, $myVar)"/>
        </xsl:when>
    </xsl:choose>
</xsl:template>


</xsl:stylesheet>

それはあなたにこの出力を与えます:

<?xml version="1.0" encoding="UTF-8"?>

    
        <out>     </out>

それはあなたが行きたい方法ですか?

于 2013-03-26T08:13:40.057 に答える