2017-07-21 10 views
0

私は、このXMLからXMLのXPathは、すべての属性を持つノードと彼の親

<?xml version="1.0" encoding="UTF-8"?> 

<contents> 
    <content type="menu_0" nested="yes"> 
    <content type="name" lang="pol"><![CDATA[PIES]]></content> 
    <content type="menu_1" nested="yes"> 
     <content type="name" lang="pol"><![CDATA[Thing1]]></content> 
     <content type="name" lang="pol"><![CDATA[Thing2]]></content> 
     <content type="name" lang="pol"><![CDATA[Thing3]]></content> 
    </content> 
    </content> 
</contents> 

を返しますXPathクエリを作成したいを見つけ、この

PIES\Thing1 
PIES\Thing2 
PIES\Thing3 

のようなものは、誰かが助けることはできますか?:)

+0

これがために非常にうまく設計された構造ではありません解析する。ここにの要素の複数のインスタンスがの下にありますか? – OldProgrammer

+0

子ノードを// content [@ type = 'menu_1']/*/text()で抽出することができますが、私はあなたがstraigt xpathで "PIES"文字列をあらかじめ追加できるとは思いません。 – OldProgrammer

+0

@OldProgrammerはただ既存のxmlを処理しようとしていますが、速くしたいのです:) – Kalmar

答えて

1

XPath 1.0を使用すると、Thing*に連結されたPIES\ですべてのノードを取得することはできません.3つのxpath式以下のようなS:

concat(//content[@type='menu_0']/content[@type='name']/text(), '\', //content[@type='menu_0']/content[@type='menu_1']/content[1]/text()) 

concat(//content[@type='menu_0']/content[@type='name']/text(), '\', //content[@type='menu_0']/content[@type='menu_1']/content[2]/text()) 

concat(//content[@type='menu_0']/content[@type='name']/text(), '\', //content[@type='menu_0']/content[@type='menu_1']/content[3]/text()) 

のXPath 2.0、あなたは以下のように1つのXPath式でリストを返すために、forループを使用することができます。

for $thing in //content[@type='menu_0']/content[@type='menu_1']/content/text() 
    return concat(//content[@type='menu_0']/content[@type='name']/text(), '\', $thing) 
+0

それは完璧ではないが、私のための開始:) – Kalmar

関連する問題