XSLT:混合文本和节点 - 如何替换<b>

时间:2015-10-25 13:37:39

标签: html regex xml xslt

我搜索并发现这篇文章大约4年前: xsl - tag position with text mixed in parent 而我正在尝试做一些类似的事情,但有点不同......但是无法让它发挥作用。我该如何改变:

<tag1>some <tag2>other</tag2> text</tag1>
into:
<tag1>some <bold>other</bold> text</tag1>

换句话说,我有混合文本和节点,我想重命名节点的标记,但保留文本中的正确位置。

1 个答案:

答案 0 :(得分:1)

您还没有为我们提供任何现有的XSLT,因此很难准确地告诉您如何将其融入您所拥有的内容中,但基本上您需要正确使用apply-templates并匹配您需要换出的元素:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

  <!-- itentity template -->
  <xsl:template match="@* | node()">
    <xsl:copy>
      <!-- apply templates to contents -->
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="tag2">
    <bold>
      <xsl:apply-templates />
    </bold>
  </xsl:template>

</xsl:stylesheet>

当这应用于您的样本输入时:

<tag1>some <tag2>other</tag2> text</tag1>

结果是:

<tag1>some <bold>other</bold> text</tag1>