将所有 xml 节点的特定属性值导出到另一个文件



我有一个具有这种结构的XML文档:

<root>
    <parent id="idvalue1" attr1="val1" attr2="val2" ...>
        <child attr3="val3" attr4="val4" ... />
        <child attr3="val5" attr4="val6" ... />
        ...
    </parent>
    <parent id="idvalue2" attr1="val7" attr2="val8" ... />
    ...
</root>

我想获取具有它的所有节点的id属性的所有值的列表。现在,可以安全地假设只有二级元素具有id属性。

无论如何,最好的方法是什么?是xmllintxpath还是xmlstarlet

您可以使用 xmlstarlet 输出列表:

    xmlstarlet sel -t -v "//@id" yourfile.xml

但是,这将仅输出 ID 值。

-t 选项"创建"一个 XSLT,就像 Abel 的答案中所建议的那样。但输出将仅是您使用 sel 命令选择的内容。选项 -v 用于在引号中打印 xpath 的值。xpath 表达式中的双斜杠调用所有节点。

我想获取具有它的所有节点的 id 属性的所有值的列表。

使用 XPath,可以使用如下所示的表达式:

//@id

我认为这很容易。如果需要一些布局,可以使用 XSLT:

<xsl:template match="/">
    <xsl:apply-templates select="//@*" />
</xsl:template>
<xsl:template match="@id">
    <xsl:text>Id is: </xsl:text>
    <xsl:value-of select="." />
    <xsl:text>&#xA;</xsl:text>
</xsl:text>

这将为您提供一个换行符分隔的列表,其中包含名称为 id 的所有属性。

相关内容

  • 没有找到相关文章

最新更新