当一个元素包含散布文本的其他元素时,如何维护文本元素的顺序?在这个(简化的)例子中:
<block>1st text<bsub>2nd text</bsub>3rd text</block>
所需的输出是:
"1st text 2nd text 3rd text"
我试过了:
<xsl:template match="block">
<xsl:value-of select=".">
<xsl:apply-templates select="bsub"/>
<xsl:value-of select=".">
</xsl:template>
<xsl:template match="bsub">
<xsl:value-of select=".">
</xsl:template>
和那些输出:
"1st text 2nd text 3rd text 2nd text 1st text 2nd text 3rd text"
如何使用<block>
选择单个文本元素(<xsl:value-of>
)?
答案 0 :(得分:0)
不要使用value-of来处理这样的混合内容 - 请改用apply-templates,它将全部适用于您。
答案 1 :(得分:0)
这个XSLT 1.0样式表...
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<t>
<xsl:apply-templates />
</t>
</xsl:template>
<xsl:template match="block|bsub">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="concat(.,' ')" />
</xsl:template>
</xsl:stylesheet>
...应用于您的输入文档...
<block>1st text<bsub>2nd text</bsub>3rd text</block>
... ...产量
<t>1st text 2nd text 3rd text </t>