2017-10-12 60 views
0

我跑出IDE如何避免這種「重複」節點的情況。基於父節點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 id = "1"> 
    <name>ABC</name> 
    <value>1</value> 
    </city> 
    <city id = "2"> 
    <name>DEF</name> 
    <value>2</value> 
    </city> 

我發佈這個(如//*:city[@name='ABC']/@name) 之前試過很多解決方案,但它與所有重複返回列表(在這種情況下3)

。任何想法如何解決?

非常感謝

+0

你可以檢查我的更新答案,它會滿足你的問題。如果不是編輯問題來解決它。 – Yash

+0

真正更新的解決方案能夠正常工作,但是在我的使用情況下,該解決方案的實施效果不佳。 – Reborn

+0

爲您的問題與父節點和子節點相關的upvote。 – Yash

回答

1

使用樣品HTML | XML測試下面XPathshere...

<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> 

從子元素列表中不同的數據:

//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

感謝您發佈答案。選項'來自父城兄弟姐妹的不同nodeNames'適合我,但不是那麼多。該城市節點還有id參數。我會更新這個例子。 – Reborn

+0

已更新示例。 – Reborn

+0

@Reborn答案更新與ID也,我希望它會幫助你。 – Yash