XSLT:如何更改父标签名称并从 XML 文件中删除属性?

标签 xslt

我有一个 XML 文件,我需要从中删除名为“Id”的属性(无论它出现在哪里,都必须将其删除),并且我还需要重命名父标记,同时保持其属性和子元素不变。你能帮我修改一下代码吗?一次,我只能实现两个要求之一..我的意思是我可以从文档中完全删除该属性,或者我可以更改父标签.. 这是我删除属性“Id”的代码:

<xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="@Id[parent::*]">
  </xsl:template>

请帮我将父标签名称从“Root”更改为“Batch”。

最佳答案

所提供的解决方案都没有真正解决问题:它们只是重命名名为“Root”的元素(甚至只是顶部元素),而没有验证该元素是否具有“Id”属性。

wwerner 最接近正确的解决方案,但重命名了父级的父级。

这是一个具有以下属性的解决方案:

  • 这是正确的。
  • 很短。
  • 它是通用的(替换名称包含在变量中)。

这是代码:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:variable name="vRep" select="'Batch'"/>

  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="@Id"/>

  <xsl:template match="*[@Id]">
    <xsl:element name="{$vRep}">
      <xsl:apply-templates select="node()|@*"/>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

关于XSLT:如何更改父标签名称并从 XML 文件中删除属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1769526/

相关文章:

jquery - XSLT处理器: operation unsecure?

XSLT:避免某些节点中的缩进

c# - 为什么我会选择 XSLT 或 XQuery 而不是另一个来生成 html 文档?

xslt - 如何获取样式表中定义的命名空间前缀,而不是从输入 XML 中获取

php - 从 php 生成 xml 和 xsl

xml - 紧凑的 XSLT 代码,如果全部为空,则删除 N 个标签

Java:如何在 org.w3c.dom 中用 <sometag> 包装所有元素?

xml - 火狐 XPCOM 插件 : "unexpected error" for xslt transform

xslt - 当某些字段可能为空时如何对 XSL 中的不同字段求和?

xml - 使用 XSLT 从 XML 中写入数据列与 Excel 中的行