如何展平文本节点和嵌套节点?

时间:2019-06-23 14:04:12

标签: xslt xslt-1.0

我正在尝试展平元素的文本节点和嵌套的内联元素

<e>something <inline>rather</inline> else</e>

进入

<text>something </text>
<text-inline>rather</text-inline>
<text> else</text>

使用e/text()将同时返回两个文本节点,但是我如何展平所有节点以便于任意内联元素(甚至嵌套)?

1 个答案:

答案 0 :(得分:0)

我不确定“扁平化”是否适用于此。似乎您要做的就是将某些文本节点更改为包含相同文本的元素。这可以通过匹配这些文本节点的模板来完成:

<xsl:template match="e/text()">
    <text>
        <xsl:copy/>
    </text>
</xsl:template>

演示https://xsltfiddle.liberty-development.net/ncdD7n4


当然,如果您还想将inline重命名为text-inline,则将需要另一个模板:

<xsl:template match="inline">
    <text-inline>
        <xsl:apply-templates />
    </text-inline>
</xsl:template>