2016-11-10 4 views
4

これは私の質問のコピーです。here これはteiidエンジンのXMLTABLEで起きていることに気づくだけです。私は、次のXMLコンテンツの解析よ:xpathを使用してxpathを使用してノードの値と属性の複数の連結を結合する

<AttributeSets> 
    <ns2:ItemAttributes xml:lang="de-DE"> 
     <ns2:Creator Role="Role1">Creator One</ns2:Creator> 
     <ns2:Creator Role="Role2">Creator Two</ns2:Creator> 
     <ns2:Creator Role="Role3">Creator Three</ns2:Creator> 
    </ns2:ItemAttributes> 
</AttributeSets> 

ここ

Select * From 
     XMLTABLE(XMLNAMESPACES(DEFAULT 'http://ns1', 
      'http://ns2/default.xsd' as ns2), 
      'AttributeSets/ns2:ItemAttributes' PASSING x.AttributeSets 
     COLUMNS 
      Creator STRING PATH 'string-join(//ns2:Creator/(@Role, node()) , '', '')' 
    ) p; 

x.AttributeSetsを使用すると、上記の内容を含むXML型の変数です。

私はこれをフォーマットし、xpathを使って1行にまとめようとしています。 のような何か:

string-join(//ns2:Creator/concat(./text(), @Role), ', ') 

私はこのため、私は、どこかに近いと思う:

string-join(//ns2:Creator/@Role , ', ') 

作品と私の役割のコンマ区切りのリストを与える:ROLE1、ROLE2、Role3

「クリエーターの一つ、クリエーターT:

この

string-join(//ns2:Creator/node(), ', ') 

は、クリエイターの値を組み合わせwo、Creator Three "を追加しました。

string-join(//ns2:Creator/(@Role, node()) , ', ') 

この1行にすべての役割やクリエイターをカンマで区切る-:

は、私は私が得ることができる最もだった

Role1: Creator One, Role2: Creator Two, Role3: Creator Three 

の最終的な出力をしたいと思います。なんらかの理由で、連動オペレータは機能していないようです。 助けてください。

答えて

1

は、次のXPath

string-join(for $n in /AttributeSets/ItemAttributes/Creator return concat($n/@Role, ':',$n/text()),',') 

があなたのソースツリーのコンテキストごとにため内のセレクタXPathを調整することを忘れないでくださいしてください。私は、それゆえ

/AttributeSets/ItemAttributes/Creator 

W3C文字列-参加関数のドキュメントはかなり同様の例があるドキュメントルートを想定しました。 ...動作し、私の役割のコンマ区切りのリストを与える:ROLE1、ROLE2、Role3

更新:これはので

私が思うに、私は、どこかに近いですよ

あなたは非常に近いと思います。私はそれに小さな微調整を試してみましたが、これは働いていた:

string-join(//ns2:Creator/concat(@Role, ':', ./text()), ', ') 

をCONCAT演算子は何が動いていないようにみえ何らかの理由で。

私はオンラインのxpathテスターhereでチェックして、それは完全に動作します。実際には、オンラインツールでxapthも受け付けます。

Creator OneRole1, Creator TwoRole2, Creator ThreeRole3 
+0

ありがとうございます!どちらのバージョンもスムーズに動作します。 –

関連する問題