【问题标题】:XSLT: Parsing HTML embedded in XML?XSLT:解析嵌入在 XML 中的 HTML?
【发布时间】:2009-07-09 16:57:59
【问题描述】:

在我的网站上,我有带有页面内容的 XML(从我的数据库自动生成)——这些 XML 使用 XSLT 显示。问题是这样的:我想在一些 XML 标记中设置一些格式。例如,如果我有一个包含文章的 XML 格式如下:

<article>
  <header>Cool article</header>
  <author>Me!</author>
  <content>
    This is an article. It's <b>HUGE</b>, and here's a <a href="http://Www.foo.com">link</a>.
  </content>
</article>

但是,如果我只是使用以下方法获取内容:&lt;xsl:value-of select="content" /&gt;,所有 HTML 格式都会被忽略/丢失。我猜它被误认为是 XML 子节点,而不是驻留在内容节点中的实际数据。

实现此处所述格式的首选方法是什么?

提前致谢。

【问题讨论】:

  • THIS 是实际答案。使用copy-of 而不是value-of

标签: html xslt


【解决方案1】:
<xsl:value-of select="content" /> 

输出一个节点的。而你的&lt;content&gt; 节点的值实际上是:

这是一篇文章。很大,这里有一个链接

您可能需要复制整个节点:

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

这主要是猜测,因为我不知道您的系统是如何工作的。

【讨论】:

  • 干杯,这部分是问题所在。 :) 使用 copy-of 而不是 value-of 并结合 修复它。
  • 这对我来说也是正确的,但这取决于将 XHTML 嵌入到 XML 中,而不仅仅是 HTML。其次,copy-of 将输出原始源 XML 文档的名称空间中的内容,而不是 XSL 输出到的名称空间。大多数网络浏览器可能并不关心,但如果您在输出中看到一堆 xmlns="..." 属性,这就是原因。
  • 旧帖,现在帮了我。
【解决方案2】:
<xsl:value-of
select="..."
disable-output-escaping="yes"/>

这适用于除Firefox 之外的所有浏览器。

【讨论】:

  • XSLT 是在服务器端解析的,所以除非我遗漏了什么,浏览器应该是无关紧要的吗? (这是我的具体问题的解决方案,顺便说一句,谢谢!)
  • @NathanHornby 浏览器也可以解析 XML/XSLT。
【解决方案3】:

我认为你的问题是这样的:

 <xsl:output method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
          media-type="application/html+xml" encoding="utf-8" omit-xml-declaration="yes" indent="no"/>

确保您的输出是 html 类型,

application/html

【讨论】:

  • 干杯!设置 method="html" 很好地修复了它。 :)
  • 很高兴能帮到你:)。
【解决方案4】:

当您将 html 直接嵌入到 elemnet 中时,要么对其进行编码,要么使用 CDATA 块来保留实际文本。两者都应该可以工作,尽管取决于转换发生的位置(例如通过 JS 的浏览器级别),编码实体的输出可能会有所不同。

【讨论】:

  • 您好,不幸的是,这使得标签以纯文本形式出现——也就是说,没有应用格式。我使用 修复了它。还是谢谢
【解决方案5】:

您可以更改该 XML 文件的生成方式,将内容放在 &lt;![CDATA[ ]]&gt; 部分中,这会告诉解析器忽略该部分中的特殊内容。

【讨论】:

  • 您好,不幸的是,这使得标签以纯文本形式出现——也就是说,没有应用格式。我使用 修复了它。还是谢谢
【解决方案6】:

将 HTML 放入 XML 文档时,请确保在将 HTML 代码放入 XML 之前对其进行编码。例如。

This is an article. It's <b>HUGE</b>, and here's a <a href="http://Www.foo.com">link</a>.  

会变成:

This is an article. It's &lt;b&gt;HUGE&lt;/b&gt;, and here's a &lt;a href="http://www.foo.com"&gt;link&lt;/a&gt;

或使用 CDATA 块,以免 HTML 格式丢失。

【讨论】:

  • 您好,不幸的是,这使得标签以纯文本形式出现——也就是说,没有应用格式。我使用 修复了它。还是谢谢
猜你喜欢
  • 2019-03-03
  • 2014-02-11
  • 2012-11-18
  • 2012-10-14
  • 2019-07-17
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多