XSLT删除标记但保留内容

时间:2013-05-08 12:47:02

标签: xml xslt

我想删除XSLT中的标记,但保留所有内容。

我有这个来源:

<?xml version="1.0" encoding="UTF-8"?>
<DOCUMENT>
    <div>
        <p>foo</p>
        <div>we want any divs found in here</div>
        <p>we want to keep everything</p>
        <p>except the div that follows DOCUMENT</p>
    </div>
</DOCUMENT>

想要这个输出:

<?xml version="1.0" encoding="UTF-8"?>
<DOCUMENT>
        <p>foo</p>
        <div>we want any divs found in here</div>
        <p>we want to keep everything</p>
        <p>except the div that follows DOCUMENT</p>
</DOCUMENT>

不受欢迎的<div>始终跟在<DOCUMENT>之后,这是我想删除的唯一<div>

我可以使用此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="/DOCUMENT/div">
        <xsl:apply-templates select="@*|node()"/>
</xsl:template>

</xsl:stylesheet>

问题:我不想使用身份转换模板执行此操作,因为我正在进行“拉”转换,而不是推送。但我很难找到替代方案。

1 个答案:

答案 0 :(得分:3)

那么,当您使用拉式样式表时,这不是简单选择DOCUMENTS / div下所有元素的最简单方法吗?

示例:

<xsl:template match="/">
<DOCUMENT>
    <xsl:for-each select="DOCUMENT/div/*">
    <xsl:copy-of select="."/>
    </xsl:for-each>
</DOCUMENT>
</xsl:template>

尝试这个时,我得到了这个结果:

<DOCUMENT>
<p>foo</p>
<div>we want any divs found in here</div>
<p>we want to keep everything</p>
<p>except the div that follows DOCUMENT</p>
</DOCUMENT>
相关问题