XPath查询仅选择唯一节点

时间:2015-06-21 12:18:25

标签: c# xml xpath selectnodes

我希望有一个非常简单的XPath查询来构建我坚持(对XPath来说很新)。我有以下xml:

 <?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,Surname(如果存在)。

任何帮助非常感谢!

2 个答案:

答案 0 :(得分:3)

之前没有Person标签且具有相同PersonID的所有Person标签
//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>'

答案 1 :(得分:1)

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