首页 > 解决方案 > 如何消除标签的所有出现?

问题描述

我想用 xslt 从输出中删除一个标签,方法是保留它的所有 children。在下面的示例中,我试图消除所有出现的<b>.

输入(带<b>标签):

<a>
  text
  <b>
    <child/>
    text
  </b>
</a>

<b>在消除s之后,预期的输出应该是:

<a>
  text
  <child/>
  text
</a>

因此,目标是保留 的子级,方法<b>是将它们在标签层次结构中上移一级。

我认为一些复杂的模板可以做到这一点,但是有一个简单的解决方案吗?我还在 xslt-1 中。

标签: xslt

解决方案


你可以这样做:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

  <xsl:output method="xml" indent="yes"/>

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

看到它在这里工作:https ://xsltfiddle.liberty-development.net/6q1SDk3


推荐阅读