我试图构造一个XPath参数,用于程序xmllint(在Bash shell脚本中使用),它将返回标记中可用标记的列表(而不列出子标记)。
以下是我拥有的XML类型:
<functionInformation>
<class>
setup
</class>
<description>
This is a natural language description of this function.
</description>
<prerequisiteFunctions>
myFunction1
myFunction2
</prerequisiteFunctions>
<prerequisitePrograms>
myProgram1
myProgram2
</prerequisitePrograms>
</functionInformation>
此XML存储在Bash变量functionInformation中。
在这个XML上使用xmllint时,我希望得到的输出如下:
class
description
prerequisiteFunctions
prerequisitePrograms
我应该注意,我希望以非递归的方式返回标记(我不希望列出所有可用的标记或子标记)。
我可以使用xmllint以如下方式访问标记中的信息:
descriptionFunctionInformation="$(echo "${functionInformation}"\
| xmllint --xpath '/functionInformation/description/text()' -\
| xargs -i echo -n "{}")"
你能告诉我如何构建一个XPath(或类似的东西)来返回我需要的信息吗?
最佳答案
您可以使用xmlstarlet
:
xmlstarlet sel -t -m '/*/*' -v 'concat(name(.)," ")' < xmlfile