首页 > 解决方案 > 如何使用 XSLT 1.0 将 XML 节点分成 2 个节点

问题描述

我有一个带有子元素的 XML 节点,我需要将其分成两个像这样的东西

<node margin="5pt" color="red">with some text and <seperator/> where the element continues</node>

结果应该是

<node margin="5pt" color="red">with some text and </node>
<node margin="5pt" color="red">where the element continues</node>

标签: xmlxsltxslt-1.0

解决方案


下面的 XSLT 1.0 样式表将拆分内容并生成单独node的元素,其内容是元素text()的兄弟seperator拼写错误

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output indent="yes" />

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

    <xsl:template match="seperator"/>

    <xsl:template match="node/text()[preceding-sibling::seperator or following-sibling::seperator]">  
        <xsl:element name="{name(..)}">
            <xsl:copy-of select="../@*|."/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

推荐阅读