220

我有以下 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,不确定问题出在哪里。

4

3 回答 3

319

您需要删除/. [谓词( 中的部分[ ])不应该在它们之前有斜线。此外,要选择 Employee 元素本身,您应该/text()在最后去掉 ,否则您只需选择 Employee 元素下方的空白文本值。

//Employee[@id='4']

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

/Employees/Employee[@id='4']
于 2013-01-09T23:06:59.837 回答
19

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

//*[@id='4']
于 2019-02-07T15:54:18.490 回答
12

尝试这样做:

/Employees/Employee[@id=4]/*/text()
于 2013-01-09T23:09:04.017 回答