XPath选择Element by属性值

Pan*_*kaj 182 xml xpath

我有以下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>
Run Code Online (Sandbox Code Playgroud)

我想选择id ="4"的Employee元素.

我正在使用XPath表达式下面没有返回任何东西.

//Employee/[@id='4']/text()
Run Code Online (Sandbox Code Playgroud)

我在http://chris.photobooks.com/xml/default.htm检查了它,它说无效的xpath,不知道问题出在哪里.

JLR*_*she 263

你需要删除/之前的[.谓词(部分[ ])不应该在它们之前有斜杠.另外,要选择Employee元素本身,您应该/text()在最后留下,否则您只需在Employee元素下立即选择空白文本值.

//Employee[@id='4']
Run Code Online (Sandbox Code Playgroud)

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

/Employees/Employee[@id='4']
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`//`选择并搜索文档的*all*节点,这些节点可能很慢.相反,如果文档的结构已知,那么使用正确的路径,如[Gilles的答案]中所建议的那样(http://stackoverflow.com/questions/14248063/xpath-to-select-element-by-attribute-value下面是#14248129. (3认同)

Gil*_*not 11

试着这样做:

/Employees/Employee[@id=4]/*/text()
Run Code Online (Sandbox Code Playgroud)

  • *46 GB* 的 xml 文件 - 有问题。 (2认同)

rog*_*ack 6

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

//*[@id='4']
Run Code Online (Sandbox Code Playgroud)