2015-06-21 137 views
0

我有什么是希望有一个非常简单的XPath查询构建,我坚持(对XPath很新颖)。我有以下xml:XPath查询来选择唯一的唯一节点

<?xml version="1.0" encoding="utf-8"?> 
    <Persons> 
     <Person> 
     <PersonID>6352</PersonID> 
     <Forename>Tristan</Forename> 
     </Person> 
     <Person> 
     <PersonID>6353</PersonID> 
     <Forename>Ruth</Forename> 
     </Person> 
     <Person> 
     <PersonID>6913</PersonID> 
     <Forename>Mina</Forename> 
     <Surname>Asif</Surname> 
     </Person> 
     <Person> 
     <PersonID>6913</PersonID> 
     <Forename>Mina</Forename> 
     <Surname>Asif</Surname> 
     </Person> 
     <Person> 
     <PersonID>6914</PersonID> 
     <Forename>Clark</Forename> 
     <Surname>Williams</Surname> 
     </Person> 
    </Persons> 

您可以看到ID 6913的人是重复的。我在XmlDocument对象中的xml,我想在SelectNodes方法中使用XPath来选择所有拥有唯一PersonID的人员。在上面的情况下,它应该给我5个人物品中的4个。

我还需要选择Person项下的所有节点。这是PersonID,Forename,姓氏(如果存在)。

任何帮助非常感谢!

回答

3

有没有使用相同的是PersonID私人标签的所有个人标记之前

//Person[not(PersonID = preceding::Person/PersonID)] 

它给你的孩子节点的人。在这种情况下,4个元素:

Element='<Person> 
    <PersonID>6352</PersonID> 
    <Forename>Tristan</Forename> 
</Person>' 
Element='<Person> 
    <PersonID>6353</PersonID> 
    <Forename>Ruth</Forename> 
</Person>' 
Element='<Person> 
    <PersonID>6913</PersonID> 
    <Forename>Mina</Forename> 
    <Surname>Asif</Surname> 
</Person>' 
Element='<Person> 
    <PersonID>6914</PersonID> 
    <Forename>Clark</Forename> 
    <Surname>Williams</Surname> 
</Person>' 
+0

这样的作品,谢谢! :-) –

1

//Person[not(PersonID = following::Person/PersonID)] 
+0

这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 –

+0

如何?你尝试过或没有尝试过。 – Kachna

+0

这也适用,谢谢! –