使用xmllint的XPath评估问题

时间:2017-06-19 19:55:58

标签: xml xpath xmllint

给出以下xml文件:

<?xml version="1.0"?>
<tomcat-users>
    <user password="PASSWORD-1"
          roles="manager-script"
          username="manager-script"/>
 <role rolename="manager-gui"/>
<user username="tomcat" password="SECRET" roles="manager-gui"/>
</tomcat-users>

我正在尝试使用xmllint命令获取以下输出字符串:PASSWORD-1

我用Google搜索并阅读了很多内容,并且刚接触XML解析,老实说我无法弄明白。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

所需的XPath是:(/tomcat-users/user/@password)[1](即返回文件中用户的第一个密码属性。

如果您想要文件中第一个用户的密码(略有不同,因为无法保证第一个用户已定义密码),请使用/tomcat-users/user[1]/@password

如果您想要所有用户的密码,请使用/tomcat-users/user/@password

我对xmllint不熟悉,所以提到:How to execute XPath one-liners from shell? 语法为:xmllint --xpath '(/tomcat-users/user/@password)[1]' inputFile.xml

构建XPath语句时,请将其视为在文件系统上的文件中键入目录;你有嵌套在其他部分下的部分,所以命名为root,然后设置一个斜线并命名它的子项,重复这个过程,直到你到达你想要的项目为止。对于属性,名称应以@为前缀,以显示其属性。方括号中的东西是一种过滤方式,当您可能有一条导致多个结果的“路径”时。只需在方括号中加一个数字就可以得到该位置的元素(第一个元素是#1;而不是大多数语言中的#0)。您可以使用这些过滤器执行更高级的操作;但这超出了你的问题的范围。