为什么XPATH(Java 7)选择了太多节点?

时间:2013-06-29 13:59:06

标签: java xpath plist

我有一个相当简单的plist XML。它看起来像这样:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>cast</key>
<array>
    <dict>
        <key>name</key>
        <string>Michael Boatman</string>
    </dict>
    <dict>
        <key>name</key>
        <string>Dillon Casey</string>
    </dict>
</array>
<key>directors</key>
<array>
    <dict>
        <key>name</key>
        <string>Jace Alexander</string>
    </dict>
</array>
</dict>
</plist>

因此XML包含两个演员和一个导演。 我的XPATH表达式是这样的:

"/plist/dict[key='directors']/array/dict/string/text()"

此表达式获取所有三个记录。为什么会这样?我尝试了许多更复杂的表达式(如dict / key [name()='director'] /../),但它总是会产生相同的结果。 当我查询“director”或“cast”时,它会获取三条记录,当我查询另一个字符串时,它会记录为零。

1 个答案:

答案 0 :(得分:1)

顶级dict元素包含值为key的子元素directors。因此,它及其所有三个array子项都是由XPath表达式合法选择的。

您应该选择

/plist/dict/key[text()='directors']/following-sibling::array[1]