1

XSLT を使用して XML ファイルを処理しており、次の属性を持つアイテムごとのプロパティのリストを取得したいと考えています。

  • 属性aaaが設定されている場合は、属性の値を取得します
  • 属性aaaが設定されていない場合は、要素の値を取得します
  • 結果セットから、異なる値のみを取得します

XML の例を次に示します。

<items>
    <item>
        <properties>
            <property aaa="">pA</property>
            <property aaa="pB">pC</property>
            <property aaa="pA">pA</property>
        </properties>
    </item>
    <item>
        <properties>
            <property aaa="">pD</property>
            <property aaa="pE">pF</property>
        </properties>
    </item>
</items>

これが私がそれを達成しようとした方法です:

<xsl:for-each select="/items/item">
    <xsl:for-each select="distinct-values(properties/property/@aaa | properties/property)[not(. = '')]"><xsl:value-of select="."/>#</xsl:for-each>
</xsl:for-each>

属性aaaは常に存在し、空になることもあります。私が抱えている問題は、属性と要素の両方が設定されている場合、両方がセットに表示されることです。属性のみを表示したい。したがって、上記の XML の場合、正しい解決策は次のようになります。

pA#pB#
pD#pE#

私のコードが代わりに私に与えるのは

pA#pB#pC#
pD#pE#pF#

それを達成することは可能ですか?

4

1 に答える 1

1

使用しているという事実は、XSLT 2.0 で作業していることを示唆しているため、XPath 2.0と構成要素distinct-valuesを組み合わせて使用​​できます。forif

distinct-values(
    for $prop in properties/property
    return if ($prop/@aaa != '') then $prop/@aaa else $prop
)
于 2013-05-15T13:27:21.900 に答える