给出以下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解析,老实说我无法弄明白。
有什么想法吗?
答案 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)。您可以使用这些过滤器执行更高级的操作;但这超出了你的问题的范围。