Xml XPath按属性值选择元素

Xml XPath按属性值选择元素,xml,xpath,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&g

我有以下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>

我在检查时发现xpath无效,不确定问题出在哪里。

您需要删除
[
之前的
/
。谓词(在
[
]
中的部分)不应该紧跟在它们前面有斜杠。另外,要选择Employee元素本身,您应该去掉
/text()
在末尾或其他地方,您只需选择Employee元素下的空白文本值即可

//Employee[@id='4']
编辑:正如Jens在评论中指出的那样,
/
可能会非常慢,因为它会在整个文档中搜索匹配的节点。如果要处理的文档结构保持一致,最好使用完整路径,例如:

/Employees/Employee[@id='4']
尝试这样做:

/Employees/Employee[@id=4]/*/text()

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

//*[@id='4']

xmllint是否在查找ID之前将整个xml文件加载到内存中?我有一个46 GB的xml文件,我在46 GB的itxml文件中查找ID-存在问题。请注意,
/
选择并搜索文档的所有节点,这可能会很慢。相反,如果已知文档的结构,请使用正确的路径,就像下面建议的那样。@Jens是的,绝对正确。我已经编辑了我的答案,添加了一个附录。
//*[@id='4']