【发布时间】:2020-02-12 04:32:33
【问题描述】:
我正在使用 xsl 修改我的 xml 文档,但无法分离节点的内容。这是一个例子:
输入 XML 文档
<root>
<exampleNode>text 1 <insideNodeA/> text 2 <insideNodeB/> text 3</exampleNode>
<exampleNode>text 4<insideNodeB/></exampleNode>
</root>
简而言之,我有一个节点,其中可以包含一些文本,以及以任何顺序排列的各种不同节点(或无节点)。没有办法事先知道内容是否只有文本,文本和节点之一,只有节点之一,文本和两个节点以任意顺序等。
这是我需要的:
需要的 XML 输出
<root>
<unwrapped>
<txt>text 1</txt>
<reworkedNodeA/>
<txt>text 2</txt>
<reworkedNodeB/>
<txt>text 3</txt>
</unwrapped>
<unwrapped>
<txt>text 4</txt>
<reworkedNodeB/>
</unwrapped>
</root>
当然,我正在改造 insideNodeA 和 B。
我的 XSL 代码
<xsl:template match="exampleNodee">
<xsl:if test="count(*)>0">
<xsl:element name="unwrapped">
<xsl:element name="txt"><xsl:value-of select="text()"/></xsl:element>
<xsl:apply-templates select="child::node()"/>
</xsl:element>
</xsl:if>
</xsl:template>
问题是这段代码只用“exampleNode”的第一个文本创建了一个“txt”元素,然后为每个子节点应用模板。
如何以正确的顺序检索“exampleNode”的内容并应用正确的模板来获得想要的输出?
【问题讨论】: