使用 XMLStarlet 删除属性



我有一个XML文档,我想使用XMLStarlet从所有元素(或给定类型的所有元素)中删除某种类型的所有属性及其值,而不会干扰其其他属性。

例如,我想从任何a元素中删除所有bad属性:

<root>
  <a href="." bad="yes"/>
  <a bad=""/>
</root>

成为

<root>
  <a href="."/>
  <a/>
</root>

XMLStarlet 的 ed 子命令有一个--delete-d选项。

a元素中删除bad属性:

xmlstarlet ed -d '//a/@bad' input.xml

删除所有bad属性:

xmlstarlet ed -d '//@bad' input.xml
我不知道

有什么方法可以直接xmlstarlet执行此操作,但据我所知,您可以调用 XSLT 转换:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="@bad"/>
</xsl:stylesheet>

使用类似于以下内容的命令应用样式表(信息取自此处):

xml tr stylesheet.xsl input.xml

生成的 XML 文件:

<root>
  <a href="."/>
  <a/>
</root>

从所有元素

(或给定类型的所有元素)

如果您只想从某些元素中移除 bad 属性,而不是全部

移除,请使用
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="element/@bad"/>
</xsl:stylesheet>

其中"element"是不应再带有 bad 属性的元素的名称。

相关内容

  • 没有找到相关文章

最新更新