XSLT:如何仅选择出现在特定嵌套标签之前的文本,而不选择出现在标签之后的文本?

时间:2019-05-13 10:35:30

标签: xslt xslt-1.0

我是xslt的新手。 我的xml代码是:

        <tag1>
          text1
          <nestedTag Id="text2" /> 
          text3
        </tag1>

我想接收此输出:

文本1文本2文本3

我写了两个模板:

  <xsl:template match="tag1">
     <b>
      <xsl:apply-templates select = "nestedTag" />
      <xsl:value-of select="."/>
     </b>
  </xsl:template>


  <xsl:template match="nestedTag">
    <xsl:value-of select="@Id"/>
  </xsl:template>

但是我明白了:

文本2文本1文本3

我的问题是:如何区分text1和text3?

1 个答案:

答案 0 :(得分:1)

您的tag1元素具有三个子节点,一个文本节点,一个元素节点和一个文本节点。通常,可以使用text()[1]选择第一个文本节点,通常可以使用node()[1]选择第一个子节点。

但是在您的示例环境中,使用XSLT即可替换

  <xsl:apply-templates select = "nestedTag" />
  <xsl:value-of select="."/>

使用

  <xsl:apply-templates/>

那样将处理所有子节点,文本节点的内置模板将输出它们。