【发布时间】:2017-01-09 17:04:01
【问题描述】:
我有一个 Web 应用程序,它采用 XML 并使用 CSS 对其进行样式设置。要将 XML 显示为 HTML,我有一些 JavaScript,例如:
document.getElementById("reportBody").innerHTML = myXml.innerHTML;
这在 Chrome 和 Firefox 中效果很好,但 Microsoft Edge 将 .innerHTML 视为未定义的 XML。我应该使用哪些不同的功能在浏览器中效果更好?为什么 Edge 对待 innerHTML 的方式与其他人不同?
阅读This stack overflow question 后,我尝试使用 XMLSerializer 让 XML 显示在 html 中:
var s = new XMLSerializer();
var myXmlString = s.serializeToString(myXml);
document.getElementById("reportBody").innerHTML = myXmlString;
我不喜欢这种方式,因为serializeToString 序列化整个 xml(包括父元素),而不是父节点的子节点。有没有更好的方法可以在更多浏览器上使用?
【问题讨论】:
-
在序列化之前,您可以使用 DOM 方法将 XML 爬升到您感兴趣的任何节点。一旦你找到了你喜欢的元素,你可以创建一个临时的 DIV 并用 innerHTML 写入它,然后在写入 reportBody 之前获取它的 innerHTML。请注意,innerHTML 不能很好地与包含 JavaScript 的 html 配合使用,但是您可以使用像 jQuery 这样的框架来提供
.html(...)方法等 -
呵呵,这一次我同意微软的选择。另外,您是否考虑过使用 XSLT 来设置 XML 样式?这就是它的用途。当然,如果您有一个几乎可行的解决方案,我不希望您更改语言,但下次您可能需要考虑它。
-
我已经在jsfiddle.net/foowr6rx 尝试了一个快速测试,对我来说使用 Edge (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393) 在最新的 Windows 10
innerHTML上不是未定义的,并且分配和 CSS 样式有效。所以考虑编辑你的问题并向我们展示一个最小但完整的代码 sn-p 不适用于 Edge。 -
@MartinHonnen 你的 jsfiddle 正是我想要做的。它在我的 Edge 版本中不起作用,所以我检查了版本,果然,我的版本是旧的。我以为 Edge 会自动更新,但事实并非如此。谢谢!
标签: javascript xml