在HTML中嵌入XML

28

如何将XML嵌入HTML页面?

我认为使用CDDATA可能是最好的方法,但在页面加载时,HTML文档会出现错误。

<script><![CDATA[ ... ]]></script>

我需要嵌入一个XML文档,以便稍后使用JavaScript进行提取。 我需要这样做是因为当用户打开它时,他们可能没有互联网访问权限。


@RayToal,不需要 - http://jsfiddle.net/hJuPs/ - Dagg Nabbit
当我尝试将它放入脚本标签中时,会出现以下错误:Uncaught SyntaxError: Unexpected token < - amcdnl
@AustinMcDaniel 看看我的答案,它需要一个 type 属性,而不是 "text/javascript"。 - Dagg Nabbit
@GGG 你说得对,谢谢。尽管这些极其烦人的 Eclipse 插件一直在告诉我需要转义,但实际上不需要转义 - Ray Toal
1
@RayToal 不仅不必要,而且根本行不通...用 XML 术语来说,你会说 script 需要 CDATA 内容,而不是 PCDATA(不确定在 HTML 术语中应该使用什么术语)。 - Dagg Nabbit
显示剩余5条评论
3个回答

38
只要XML中不存在任何</script>标记,你可以将其放在具有自定义type属性(而没有CDATA部分)的脚本标记内。给脚本标记一个id属性,这样你就可以获取内容。
<script id="myxml" type="text/xmldata">
    <x>
        <y z="foo">

        </y>
    </x>
</script>​

... 

<script> alert(document.getElementById('myxml').innerHTML);​ </script>

http://jsfiddle.net/hJuPs/


设置 type="text/xml" 是我所缺失的技巧!谢谢! - amcdnl
1
@AustinMcDaniel 注意,它不一定是"text/xml" ... 它只需要不是"text/javascript"即可。 - Dagg Nabbit
3
请注意,如果省略不写类型,则在HTML5中默认为“text/javascript”类型。 - Kamiel Wanrooij
@AustinMcDaniel 避免使用类型为 text/xml 的格式!在规范中,它将 "text/xml" 列为“不得解释为脚本语言”的 MIME 类型之一。然而,它也指出 script 元素被设计用于存储数据块。有趣的是。 - Ray Toal
1
@RayToal 哦,好的,这个知道了。我想知道在某些实现中是否会对 text/xml 进行特殊处理?我将其更改为自定义 MIME 类型 :) 编辑 - 但是等等,不被解释为脚本语言难道不正是我们想要的吗?我认为这意味着 text/xml 保留用于我们正在尝试做的事情,对吧? - Dagg Nabbit

0

这样怎么样:

<script>
    var xml = '<element> \
                 <childElement attr="value" /> \
               </element>';
</script>

这将使您能够轻松地嵌入XML以便在JavaScript中进行后续检索。


0

根据此链接,它已被弃用。然而,我以前从未见过这个网站,也没有在看到这个堆栈问题之前听说过<xml>标签。http://www.html-5.com/changes/deprecated/xml-tag.html - jwp
1
XML仍然广泛应用于全球近九成的应用程序中,无论某些网络人士是否“不喜欢它”并认为“json更好”(实际上是它被弃用的真正原因)。我希望提供一种替代方案来嵌入XML,否则它将被弃用。 - 1.21 gigawatts
@1.21gigawatts 我怀疑这不是 element 被删除的真正原因。根据存档的 MDN 页面 在 Mozilla 中使用 XML 数据岛,该功能仅在 Internet Explorer 中受支持,而 Internet Explorer 10 甚至不再支持 它。与 <script> 技巧相比,它似乎很可能没有得到广泛使用,我认为后者自 "DOM 0" 以来一直有效。 - SamB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接