2

我想删除 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>

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

4

1 回答 1

4

好吧,当您使用拉式样式表时,简单地选择 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>
于 2013-05-08T13:55:12.687 回答