如何使用xslt删除特定元素而不删除其中的文本

时间:2015-02-06 09:40:10

标签: xml xslt xslt-2.0

这是我的输入xml

<para>
<a><b>this is a text</b></a>
</para>

这是我预期的输出

<para>
this is a text
</para>

如何删除所有&#34; a&#34;标签和&#34; b&#34;仅使用标签,使用xslt感谢

不会影响文本

3 个答案:

答案 0 :(得分:1)

从身份转换模板

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

然后添加

<xsl:template match="a | b">
  <xsl:apply-templates/>
</xsl:template>

处理你的元素。

答案 1 :(得分:0)

<xsl:template match="//para">
   <xsl:copy>
      <xsl:value-of select="."></xsl:value-of>
   </xsl:copy>
</xsl:template>

(或避免其他子元素的空格:

<xsl:template match="//para">
   <xsl:copy>
      <xsl:value-of select="./*/*/text()"></xsl:value-of>
   </xsl:copy>
</xsl:template>

答案 2 :(得分:0)

问题解决..

<xsl:strip-space elements="*"/>
 <xsl:template match="*">
        <xsl:copy>
            <xsl:apply-templates select="node()"/>
        </xsl:copy>
    </xsl:template>

<xsl:template match="//*/text()">
  <xsl:if test="normalize-space(.)">
    <xsl:value-of select=
     "concat(normalize-space(.), '&#xA;')"/>
  </xsl:if>
  <xsl:apply-templates />
</xsl:template>
<xsl:template match="*[not(node())]" />