XSL:将文本与标签处理结果相结合

时间:2012-01-09 19:01:01

标签: xslt

我有一个标签,可以包含要处理的文本和xml标签的混合。假设对于标签我定义了xsl:templates,如何构建xsl,以便转换的结果是文本片段和标签替换的结果,它们与原始文档中的顺序相同?

这是源xml:

<diagnosis>
    Line 1
    Line 2
    <terminology code="1234"/>
    Line 3
</diagnosis>

输出应该是这样的:

Line 1 Line 2 Description1234 Line 3

Description1234是查找代码1234的结果。现在我并不关心如何将它们拼接在一起。

1 个答案:

答案 0 :(得分:1)

我不确定<terminology/>如何映射到“描述”,所以我假设如下:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>
  <xsl:template match="/">
    <xsl:apply-templates/>
    <!-- Final newline -->
    <xsl:text>
</xsl:text>
  </xsl:template>
  <xsl:template match="terminology">
    <!-- Spaces are added at the front and... -->
    <xsl:text> Description</xsl:text>
    <xsl:value-of select="@code"/>
    <!-- at the end of attribute -->
    <xsl:text> </xsl:text>
  </xsl:template>
  <xsl:template match="text()">
    <!-- Strip all white space, specifically the newlines -->
    <xsl:value-of select="normalize-space(.)"/>
  </xsl:template>
</xsl:stylesheet>

这是我通过xsltproc运行示例XML('so.xml')时得到的结果:

~ zacharyyoung$ xsltproc so.xsl so.xml
Line 1 Line 2 Description1234 Line 3