2017-10-12 7 views
0

この「重複」ノードの状況を回避する方法を使い果たしました。親ノードIDに基づく子ノードのリストを重複なしで取得する

問題: は考えてみて、私たちは、XMLを次ています

<root> 
<cities> 
    <city id = "1"> 
    <name>ABC</name> 
    <value>1</value> 
    </city> 
    <city id = "2"> 
    <name>DEF</name> 
    <value>2</value> 
    </city> 
    <city id = "1"> 
    <name>ABC</name> 
    <value>1</value> 
    </city> 
    <city id = "1"> 
    <name>ABC</name> 
    <value>1</value> 
    </city> 
<cities> 
</root> 

私は何をアーカイブしているのはそれとは重複を避けるためです。だから、出力に私が見たいと2つのノードの出力:私はこの(のような//*:city[@name='ABC']/@name) を投稿する前に多くのソリューションを試してみました

<city id = "1"> 
    <name>ABC</name> 
    <value>1</value> 
    </city> 
    <city id = "2"> 
    <name>DEF</name> 
    <value>2</value> 
    </city> 

が、それはすべての重複してリストを返す

(この場合は3)。任意のアイデアを解決する方法?

感謝子要素リストから

+0

私の更新された回答を確認できますか?それはあなたの質問を満たすでしょう。それを解決するために質問を編集しない場合。 – Yash

+0

本当に更新されたソリューションは動作しますが、その実装は私の使用例でうまく機能しません。 – Reborn

+0

親ノードと子ノードに関連する質問のupvote。 – Yash

答えて

1

使用したサンプルHTML | XML試験

<cities> 
<city> 
    <name>ABC</name> 
    <value>2</value> 
</city> 
<city> 
    <name>ABC</name> 
    <value>1</value> 
</city> 
<city> 
    <name>DEF</name> 
    <value>2</value> 
</city> 
<city> 
    <name>AB</name> 
    <value>1</value> 
</city> 
<city> 
    <name>ABC</name> 
    <value>1</value> 
</city> 
<cities> 

here...XPaths以下個別データ:

//cities/descendant::city[not(.=preceding-sibling::city)] 

個別ノードValues F orm parent City兄弟。

//cities/descendant::city[not(./value=preceding-sibling::city/value)]/value 

City兄弟は異なるノードNames。別個のデータと

//cities/descendant::city[not(./name=preceding-sibling::city/name)]/name 

nodes of same level。ノードの属性値を持つ

<root> 
    <item type='test'>A</item> 
    <item type='test'>B</item> 
    <item type='test'>C</item> 
    <item type='test'>A</item> 
    <item type='other'>A</item> 
    <item type='test'>B</item> 
    <item type='other'>D</item> 
</root> 
//preceding::item/preceding::item[not(.=preceding-sibling::item)]/text() 

更新答え:

<root> 
<cities> 
    <city id = "1"> 
    <name>ABC</name> 
    <value>1</value> 
    </city> 
    <city id = "3"> 
    <name>DEF</name> 
    <value>2</value> 
    </city> 
    <city id = "1"> 
    <name>ABC</name> 
    <value>1</value> 
    </city> 
    <city id = "4"> 
    <name>ABC</name> 
    <value>1</value> 
    </city> 
    <city id = "2"> 
    <name>DE</name> 
    <value>2</value> 
    </city> 
<cities> 
</root> 

のXPath:

//cities/city/following::city[not(./@id=following::city/@id)] 

//cities/city/following::city[not(./@id=following::city/@id)]/name 

//cities/city/following::city[not(./@id=following::city/@id)]/value 
+0

回答を投稿していただきありがとうございます。オプション '親のCity SiblingsからのDistinct nodeNames'は私には適しているがそれほど多くはない。その都市ノードへのidパラメータもあります。この例を更新します。 – Reborn

+0

例が更新されました。 – Reborn

+0

@Rebornの回答もIDで更新されました。 – Yash

関連する問題