【问题标题】:Transforming XML mixed nodes with disable-output-escaping使用禁用输出转义转换 XML 混合节点
【发布时间】:2010-11-23 01:03:28
【问题描述】:

已发布了有关此问题的变体,但我找不到任何解决基本情况的方法。我认为对问题的最简单版本有一个规范的答案会很好。这个问题假设 xslt 1.0。

我有一个包含混合节点的 XML 文档,例如:

这是一些 bold 的文本 这是一些斜体的。段>

我通常会使用如下所示的转换:

【问题讨论】:

  • 你想让<bold>等出现转义还是不转义?
  • 很抱歉没有说得更清楚。我希望文本被转义,但我希望能够继续匹配任何子节点(如粗体)。

标签: xml xslt


【解决方案1】:

如果我理解正确,您希望文本节点以文字文本 (disable-output-escaping="yes") 的形式出现,但其余的转换应该正常工作(<bold><b> 等)

模板模式可以提供帮助:

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

  <xsl:template match="paragraph">
    <p>
      <xsl:apply-templates mode="literal" />
    </p>
  </xsl:template>

  <!-- literal templates (invoked in literal mode) -->
  <xsl:template match="bold" mode="literal">
    <b><xsl:apply-templates mode="literal"/></b>
  </xsl:template>
  <xsl:template match="italic" mode="literal">
    <i><xsl:apply-templates mode="literal"/></i>
  </xsl:template>
  <xsl:template match="text()" mode="literal">
    <xsl:value-of select="." disable-output-escaping="yes" />
  </xsl:template>

  <!-- normal templates (invoked when you don't use a template mode) -->
  <xsl:template match="bold">
    <b><xsl:apply-templates /></b>
  </xsl:template>
  <xsl:template match="italic">
    <i><xsl:apply-templates /></i>
  </xsl:template>

</xsl:stylesheet>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多