【问题标题】:How do I preserve markup tags?如何保留标记标签?
【发布时间】:2008-10-02 13:21:31
【问题描述】:

我有一个包含新闻故事的 XML 文档,新闻故事的正文元素在纯文本中包含 p 个标签。当我使用 XSL 检索正文时,例如

<xsl:value-of select="body" />

p 标签似乎被剥离了。我正在使用 Visual Studio 2005 的 XSL 实现。

有没有人知道如何避免这种情况?谢谢。

【问题讨论】:

    标签: xml xslt


    【解决方案1】:

    尝试使用

    <xsl:copy-of select="body"/>
    

    相反。来自w3schools' documentation on same

    &lt;xsl:copy-of&gt; 元素创建一个 当前节点的副本。

    注意:命名空间节点、子节点、 当前节点的属性是 也自动复制!

    【讨论】:

    • 救命稻草。谢谢。
    【解决方案2】:

    如果您无法控制输入文档,副本应该可以工作:

    来自http://www.xml.com/pub/a/2000/06/07/transforming/index.html

    “另一方面,xsl:copy-of 元素可以复制模板选择的每个节点的整个子树。这包括属性,如果 xsl:copy-of 元素的 select 属性具有适当的值。在在下面的示例中,模板复制标题元素节点及其所有后代节点——换句话说,完整的标题元素,包括它们的标签、子元素和属性:"

    <xsl:template match="title">
      <xsl:copy-of select="*"/>
    </xsl:template>
    

    【讨论】:

    • 谢谢,这确实有效,我首先看到了 Blair Conrad 的建议,但你们都说了同样的话。
    【解决方案3】:

    如果您可以控制输入文档,CDATA 是正确的选择。

    【讨论】:

    • 如果我使用 CDATA 包装我的嵌套 HTML,我会得到文字 HTML,我想保留换行符(即段落标签)。
    【解决方案4】:

    XML 元素的值——不仅在 XSLT 中如此,在 DOM 实现中也是如此——是其所有后代文本节点的连接。在 XSLT 中,value-of 发出元素的值,而copy-of 发出元素的副本。

    【讨论】:

      【解决方案5】:

      这是因为引擎正在解释

      标签(将其排除在输出之外)。您需要使用“disable-output-escaping=yes|no”属性指定您想要的内容“原样”。

      <xsl:value-of select="body" disable-output-escaping="yes"/>
      

      【讨论】:

      • disable-output-escaping 用于启用/禁用保留字符的转义(> 变为 > 或保持 >)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 2021-11-09
      • 2021-12-26
      • 2015-12-13
      • 2022-01-01
      • 2011-02-28
      • 2023-03-22
      相关资源
      最近更新 更多