【问题标题】:how can I render HTML in attribute in XSLT如何在 XSLT 的属性中呈现 HTML
【发布时间】:2015-05-21 19:11:45
【问题描述】:

假设我有以下 XML:

<root>
    <node attr="<b>hi</b>" />
    <node attr="<b>bye</b>" />
</root>

如何获取 XSLT 1.0 代码以在属性中呈现实际的 HTML?

这不起作用,因为它输出 &lt;b&gt;hi&lt;/b&gt;

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

有什么想法吗?

澄清

我在 DVWP WebPart 中的 SharePoint 2010 上使用它。 WebPart 将允许我使用 XSLT 将返回的 XML 列表转换为显示在浏览器上的 HTML。现在渲染的输出是&lt;b&gt;hi&lt;/b&gt;,而不是粗体文本。我想我需要做的是两次禁用输出转义。第一次将获得&lt;b&gt;hi&lt;/b&gt;,第二次将被渲染。有意义吗?

【问题讨论】:

  • "这不起作用,因为它会输出&lt;b&gt;hi&lt;/b&gt;" 你希望它输出什么? --附言这不是您的 XML 的样子,是吗?因为那只会产生错误。
  • 我希望它以粗体显示 hi。现在输出有文字 hi。是的,我知道,但为了简洁起见,我想我会保持简单。
  • 你在哪里运行你希望粗体呈现的?祝你好运。
  • @shellter:我应该澄清一下。对不起。添加了详细信息。
  • 如果 rendered 输出是&lt;b&gt;hi&lt;/b&gt;,那么 HTML 结果不是你说的那样。很难准确地说出这里发生了什么,因为您的 XML 显然不是您向我们展示的,而且 XSLT 是部分的。我建议您发布足够的代码(XML + XSLT)以使我们能够重现该问题。

标签: xml xslt sharepoint sharepoint-2010 xslt-1.0


【解决方案1】:

你要求的东西不是。 XSL 转换的结果是一个文本文档:它可以是 XML、HTML 或纯文本(实际上,XML 和 HTML 也是纯文本文档的类型)。

这样的粗体文本只存在于屏幕上,在某些应用程序将标记为粗体的文本呈现之后。对于 HTML 标记,执行呈现的应用程序是 Web 浏览器。

如果您想查看由您的转换生成的 HTMl 的渲染视图,您需要在处理链的末尾插入一个浏览器。一些 XSLT 编辑器具有内置的 Web 浏览器,允许您在“原始”结果和渲染视图之间切换结果视图。但这与 XSL 转换本身无关。


根据您的说明添加:

关于disable-output-escaping,您应该了解两件事可能与您的情况有关:

  1. XSLT 处理器不需要支持禁用输出 逃跑。

  2. XSLT 处理器只有在以下情况下才能禁用输出转义 控制结果树的输出方式。这可能并不总是 案子。

这些是来自XSLT 1.0 specification 的直接引用。

我不确定 SharePoint 是如何工作的,但如果 - 例如 - XSLT 转换将其结果作为 DOM 树直接传递给浏览器,而不是将其序列化为“字节序列”(即文件),那么disable output escaping 将无效。

【讨论】:

  • 我想我应该澄清一下。我更新了问题。
  • 我不确定原始 XML 有什么,但是当我使用 disable-output-escaping 渲染时,浏览器页面上的输出是 &lt;b&gt;hi&lt;/b&gt;,而不是粗体的 hi。呈现的 HTML 为 &amp;amp;gt;b&amp;amp;lt;hi&amp;amp;gt;/b&amp;amp;lt;。我假设原始 XML 具有类似 &amp;amp;gt;b&amp;amp;lt;hi&amp;amp;gt;/b&amp;amp;lt; 的内容,这意味着 disable-output-escaping&amp;amp; 转换为 &amp; 并将输出发送到浏览器。不确定这是否有意义。
  • @IMTheNachoMan "我不确定原始 XML 有什么" 使用 identity transform 模板找出答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
相关资源
最近更新 更多