4

特定の属性が特定の値を返す場合、変数に値を代入したいと考えています。ここで、pr:all/[@pr:name=current()/@cx:name]/pr:properties/(@ls:middlename) が "cengie "。それは可能ですか?

<xsl:variable
  name='person' select='pr:all/[@pr:name=current()/@cx:name]/pr:properties/(@ls:middlename)'>
</xsl:variable>
4

3 に答える 3

24

xsl:variable内に任意のxsltコードを配置すると、結果が変数に割り当てられます。この場合、xsl:ifを使用して状態を確認できます。

<xsl:variable name="person"> 
    <xsl:if test="pr:all[@pr:name=current()/@cx:name]/pr:properties[@ls:middlename='cengie']">
       <xsl:text>young</xsl:text>
    </xsl:if>
</xsl:variable> 

ここで「else」の場合が必要な場合は、代わりにxsl:chooseを使用します。

于 2012-07-04T06:22:04.967 に答える
4

use-whenテンプレートを条件付きで適用するを使用できます。

ただし、テンプレートの「コンパイル時」に評価されます。

これを確認してください: https://github.com/wildfly/wildfly/blob/master/testsuite/integration/src/test/xslt/enableTrace.xsl

<xsl:template match="//l:subsystem/l:periodic-rotating-file-handler" use-when="$trace">
    <xsl:choose>
        <xsl:when test="$trace='none'">
            ...
        </xsl:when>
        <xsl:otherwise>
            ...
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

それをあなたのコードに適用してください...

于 2012-07-04T05:07:13.030 に答える
2
<xsl:variable   name='person' 
    select='pr:all/[@pr:name=current()/@cx:name]/pr:properties/(@ls:middlename)'>

</xsl:variable>

これは構文的に不正な XPath です (1.0 と 2.0 の両方)。ロケーション ステップは、述語で開始することはできません。問題のある部分文字列は次のとおり/[です。

もう 1 つの構文エラー(今回は XML 整形式エラー) は、<xsl:variable>上で引用した要素が閉じていないことです。

これを修正する必要があります。

これに加えて、ここに XSLT 2.0 ソリューションがあります (上記で引用された XPath 式の構文と<xsl:variable>修正された:

XSLT 2.0 では:

<xsl:variable name="person" as="xs:string?" select=
  "'young'[current()/pr:all[@pr:name=current()/@cx:name]
                                            /pr:properties
                                               [@ls:middlename='cengie']
          ]"/>
于 2012-07-05T03:53:02.027 に答える