0

当一个元素包含其他元素穿插文本时,如何保持文本元素的顺序?在这个(简化的)示例中:

  <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>

4

2 回答 2

0

不要使用 value-of 来处理这样的混合内容 - 使用 apply-templates 来代替它,这一切都对你有用。

于 2012-08-30T02:58:19.553 回答
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>
于 2012-08-30T03:44:16.530 回答