1

XSL ステートメントで別の問題が発生しています。条件を追加して、特定の値が見つかった場合、このインスタンス「呼び出し」で動作が少し異なるようにしています。私が間違っているのは簡単なことだとわかっていますが、何がわかりません!

基本的に、以下のコードでは正しいブール値を返すように見えますが、それは実行され、通話コストの文言をそのままにします。クラスと URL の場所は両方とも正しく出力されます。

前もって感謝します!

XML

<rhs_options>
<title>RHS title</title>
<service>
    <option>call</option>
    <text>telephone number text</text>
    <telephone>telephone number</telephone>
    <link>telephone number link</link>
</service>
<service>
    <option>branch</option>
    <text>branch text</text>
    <telephone/>
    <link>branch link</link>
</service>
<service>
    <option>online</option>
    <text>online text</text>
    <telephone/>
    <link>online link</link>
</service>

XSL

<aside class="cta">
<h4><xsl:value-of select="/Properties/Data/Datum[@ID='ID1']/DCR[@Type='RHS_Options']/rhs_options/title"/></h4>
    <xsl:for-each select="/Properties/Data/Datum[@ID='ID1']/DCR[@Type='RHS_Options']/rhs_options/service">  
        <xsl:choose>
            <xsl:when test="/Properties/Data/Datum[@ID='ID1']/DCR[@Type='RHS_Options']/rhs_options/service/option='call'">
                <p class="{./option}">
                    <xsl:value-of select="./text"/>
                        <br/>
                    <xsl:value-of select="./telephone"/>
                        <br/>
                    <a href="{./link}">
                        Call charges
                    </a>
                </p>
            </xsl:when>
            <xsl:when test="/Properties/Data/Datum[@ID='ID1']/DCR[@Type='RHS_Options']/rhs_options/service/option='phone'or'online'">
                <p class="{./option}">
                    <a href="{./link}">
                        <xsl:value-of select="./text"/>
                    </a>
                </p>
            </xsl:when>
        </xsl:choose>   
    </xsl:for-each>

4

1 に答える 1

1

あなたがしたい

    <xsl:choose>
        <xsl:when test="option='call'">
            <p class="{option}">
                <xsl:value-of select="text"/>
                    <br/>
                <xsl:value-of select="telephone"/>
                    <br/>
                <a href="{link}">
                    Call charges
                </a>
            </p>
        </xsl:when>
        <xsl:when test="option='phone' or option = 'online'">
            <p class="{option}">
                <a href="{link}">
                    <xsl:value-of select="text"/>
                </a>
            </p>
        </xsl:when>
    </xsl:choose>

説明:

提供されたコードの問題は、絶対XPath 式が使用されているが、相対XPath 式を使用する必要があることです。

確かに、`xsl:for-each*を使用したり、明示的な XSLT 条件命令を使用したりしない方がよいでしょう。

同等ですが、はるかにコンパクトで保守しやすいコードを次に示します。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*">
    <aside class="cta">
        <h4><xsl:value-of select="title"/></h4>
        <xsl:apply-templates/>
    </aside>
 </xsl:template>

 <xsl:template match="service[option='call']">
   <p class="{option}">
     <xsl:value-of select="text"/>
     <br/>
     <xsl:value-of select="telephone"/>
     <br/>
     <a href="{link}">
      Call charges
     </a>
   </p>
 </xsl:template>

 <xsl:template match="service">
   <p class="{option}">
     <a href="{link}">
       <xsl:value-of select="text"/>
     </a>
   </p>
 </xsl:template>
</xsl:stylesheet>

この変換が提供された XML ドキュメントに適用されると、次のようになります。

<rhs_options>
    <title>RHS title</title>
    <service>
        <option>call</option>
        <text>telephone number text</text>
        <telephone>telephone number</telephone>
        <link>telephone number link</link>
    </service>
    <service>
        <option>branch</option>
        <text>branch text</text>
        <telephone/>
        <link>branch link</link>
    </service>
    <service>
        <option>online</option>
        <text>online text</text>
        <telephone/>
        <link>online link</link>
    </service>
</rhs_options>

必要な結果が生成されます。

<aside class="cta">
   <h4>RHS title</h4>RHS title<p class="call">telephone number text<br/>telephone number<br/>
      <a href="telephone number link">
      Call charges
     </a>
   </p>
   <p class="branch">
      <a href="branch link">branch text</a>
   </p>
   <p class="online">
      <a href="online link">online text</a>
   </p>
</aside>
于 2012-10-25T15:40:41.077 に答える