我正在用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”的内容并应用正确的模板以获得所需的输出?
答案 0 :(得分:0)
好的,我实际上找到了问题的答案,毕竟这很简单。
所以我所要做的就是创建一个匹配“ text()”的模板,并将我的exmplepleNode模板更改为:
<xsl:element name="unwrapped">
<xsl:apply-templates select="text() | node()"/>
</xsl:element>