2

特定の属性も持つ (名前に基づく) 要素の一意のリストを取得するのに少し苦労しています。それらのいずれかのリストを取得できますが、結合されたリストが私をつまずかせています。私のxmlは次のようになります:

<global>
    <discipline name="tracks">
        <group name="Normal"/>
        <group name="Gloss" PackGroup="Diffuse"/>
        <group name="Mask"/>
        <group name="Diffuse"/>
        <group name="Tint" PackGroup="Gloss"/>
    </discipline>
    <discipline name="trains">
        <group name="Mask"/>
        <group name="Diffuse" PackGroup="Mask"/>
    </discipline>
</global>

この xpath クエリを使用して、グループ要素の個別のリストを簡単に取得できます。

/configuration/global/discipline/group[not(@name = following::group/@name)]

PackGroup 属性が定義されているグループ要素のリストを取得するのも簡単です。

/configuration/global/discipline/group[@PackGroup]

ただし、PackGroup 属性が定義されている要素の一意のリストを取得できないようです。私はこれを試しました:

/configuration/global/discipline/group[not(@name = following::group/@name) and @PackGroup]
/configuration/global/discipline/group[not(@name = following::group/@name) and contains(@PackGroup, '*')]

要素を返さない

/configuration/global/discipline/group[not(@name = following::group/@name) and contains(@PackGroup, '')]

一意のリストのみを返します。私が探しているものを取得するための正しい xpath クエリを知っている人はいますか?

(問題が発生した場合に備えて、私は C# と xpath 2.0 で作業しています)

ありがとう!

4

2 に答える 2

6

より効率的なソリューション (O(n*n) ではなく O(n log n)) は次のようになります。

for $n in distinct-values(//group[@Packgroup]/@name) 
return (//group[@Packgroup][@name=$n])[1]
于 2013-08-26T22:53:51.560 に答える