XPath通过属性值选择元素


193

我有以下XML。

<?xml version="1.0" encoding="UTF-8"?>
<Employees>
    <Employee id="3">
        <age>40</age>
        <name>Tom</name>
        <gender>Male</gender>
        <role>Manager</role>
    </Employee>
    <Employee id="4">
        <age>25</age>
        <name>Meghna</name>
        <gender>Female</gender>
        <role>Manager</role>
    </Employee>
</Employees>

我想选择id =“ 4”的Employee元素。

我正在使用下面的XPath表达式,该表达式不返回任何内容。

//Employee/[@id='4']/text()

我在http://chris.photobooks.com/xml/default.htm上进行了检查,并显示无效的xpath,不确定问题出在哪里。

Answers:


274

您需要删除/之前的[。谓词(中的部分[ ])不应紧接在其前面。另外,要选择Employee元素本身,应/text()在结尾处保留,否则,您只需选择Employee元素正下方的空白文本值即可。

//Employee[@id='4']

编辑:正如Jens在评论中指出的那样,//它可能非常慢,因为它会在整个文档中搜索匹配的节点。如果您使用的文档结构是一致的,则最好使用完整路径,例如:

/Employees/Employee[@id='4']

3
请注意,//选择并搜索文档的所有节点可能会很慢。相反,如果已知文档的结构,则使用正确的路径,如下面Gilles的答案中所建议的。
詹斯

@Jens是的,这是绝对正确的。我已经编辑了答案以添加附录。
JLRishe '16


12

接下来,您可以选择“具有特定属性的所有节点”,如下所示:

//*[@id='4']
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.