xml - XSLT 删除标签但保留内容

标签 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>

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

最佳答案

那么,当您使用拉式样式表时,简单地选择 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>

关于xml - XSLT 删除标签但保留内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16441127/

相关文章:

java - org.apache.xalan.processor.TransformerFactoryImpl 上的 AbstractMethodError

xml - 使用 XSLT 将 XML 中的日期和转换为 UTC 时区

java - 如何自定义和覆盖 jaxb 绑定(bind)

c# - 非法语法需要有效的起始名称字符

xml - Groovy:Xml:如何在单个循环中读取已解析的 xml 字符串的文本

c# - 合并 xml 命名空间

xml - 在子节点中使用 apply-template 和字符串操作进行新手转换

java - 如何通过 docx4j 将图像插入 Word 模板而不调整其大小

c++ - gSoap - 将请求/响应提取为 XML 字符串

java - 写在一个xml的末尾