XPath在子节点中选择母节点

时间:2014-02-25 13:34:42

标签: xml xpath tree

所以我正试图解决这个问题:“找到沉没的船只的名字”

和“查找所有正在战斗中的船只的名称”

但我遇到了一些问题。

我有这个XML文档:

<Ships>
  <Class name="Kongo" type="be" country="Japan" numGuns="8" bore="14" displacement="32000">
    <Ship name="Kongo" launched="1913"/>
    <Ship name="Hiei" launched="1914"/>
    <Ship name="Kirishima" launched="1915">
      <Battle outcome="sunk">Guadalcanal</Battle>
    </Ship>
    <Ship name="Haruna" launched="1915"/>
  </Class>

并且“找到沉没的船只的名字” 我试试:

Ships/Class/Ship/Battle[@outcome = 'sunk']

并获得:

<Battle outcome="sunk">Guadalcanal</Battle>
<Battle outcome="sunk">Malaya</Battle>

但这不是正确的结果,是吗?在选择战斗结果或选择战斗中的船只时,我不知道如何选择船名。我该怎么做?

1 个答案:

答案 0 :(得分:1)

尝试这种方式来获取“沉没的船只”:

Ships/Class/Ship[Battle/@outcome = 'sunk']

将要选择的元素选为路径中的最后一个元素,并在方括号内为该元素制定条件。

或者通过这种方式获得船名:

Ships/Class/Ship[Battle/@outcome = 'sunk']/@name

要获取具有子<Ship>的所有<Battle>元素,请选择该船的名称,简而言之“查找所有正在战斗中的船只的名称”:< / p>

Ships/Class/Ship[Battle]/@name