这是我的XML的一部分:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<nlpcmp>
 <word string="getuserscount" occurrences="2">
  <systems>
   <system name="mks">
    <pos file="IrcChannel.cpp" part="adjective" line="414" occ="2"/>
   </system>
  </systems>
 </word>
 <word string="setuserprivilege" occurrences="2" >
  <systems>
   <system name="mks">
    <pos file="IrcChannel.cpp" part="adjective" line="375" occ="2"/>
   </system>
  </systems>
 </word>
 <word string="hasprivilege" occurrences="2" >
  <systems>
   <system name="mks">
    <pos file="IrcChannel.cpp" part="verb" line="360" occ="2"/>
   </system>
  </systems>
 </word>
 <word string="partmessage" occurrences="2" >
  <systems>
   <system name="TEST">
    <pos file="IrcChannel.cpp" part="verb" line="308" occ="2"/>
   </system>
  </systems>
 </word>
</nlpcmp>


我正在尝试仅使用xmllint查找被称为mks的系统的字符串列表

输出应该给我:

getuserscount
setuserprivilege
hasprivilege


所以我尝试了以下命令:

xmllint --xpath 'string(//nlpcmp/word/@name)' file.xml


没有输出,然后我尝试了:

xmllint --xpath "//*[local-name()='word'][system/@name[mks]" file.xml


它说:
XPath错误:谓词无效
xmlXPathEval:评估失败

然后我尝试

xmllint --xpath "//*[local-name()='word']" file.xml


它给了我所有我不想要的“ word”标签的内容。我只需要字符串。我怎样才能做到这一点?

最佳答案

此xmllint命令

xmllint --xpath "/nlpcmp/word[systems/system/@name = 'mks']/@string" file.xml


将产生此输出

getuserscount
setuserprivilege
hasprivilege


按照要求。

关于xml - 使用xmllint从XML文件提取属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33226132/

10-09 15:46