我试图构造一个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

10-05 20:39
查看更多