0

我在浏览器中使用 xml+xsl 并在 javascript 中处理异步页面,但无法将 xml 处理的tr元素添加到表tbody,因为行元素看起来像纯文本。我发现一些技巧可以通过复制 innerHTML(convertChild 函数)来修复它:

var xmlDom = pageProcessor().transformToDocument(xml);
var root = xmlDom.documentElement;
var tbody = document.getElementById('table-content');
for (var i = 0; i < root.childElementCount; i++) {
    tbody.appendChild(convertChild(root.children[i]));
}

function convertChild(source) {
    var tmp1 = document.createElement('tbody');
    tmp1.appendChild(source);
    var tmp2 = document.createElement('tbody');
    tmp2.innerHTML = tmp1.innerHTML;
    return tmp2.firstChild;
}

pageProcessor 函数返回带有导入的 xsl 样式表的 XSLTProcessor。xml 变量是 Sarissa 库 dom 文档。在调试器中 root.children[i] 看起来是有效的。

如何摆脱这种黑客攻击并将元素正确附加到表中?

更新:

我使用 Firefox 37.0.2

xml 看起来像这样:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<rows>
<row><item>key44</item><item>val44</item></row>
<row><item>key45</item><item>val45</item></row>
...
</rows>

我 console.log 将 xslt 处理的每个 html 元素从行项记录tr td

解决了:

谢谢你,马丁霍南!

transformToFragment(sourceDoc, ownerDoc) 

作品!

请张贴答案。

4

1 回答 1

2

我认为,据我了解,在 Mozilla 浏览器或 Chrome 之类的浏览器中,浏览器本身提供了 XSLTProcessor 的实现,与 Sarissa 一起使用的对象是浏览器的本机实现。所以我建议,如果 Firefox 是你唯一的目标浏览器,那么简单地使用transformToFragment如下:

var resultFragment = pageProcessor().transformToFragment(xml, document);
document.getElementById('table-content').appendChild(resultFragment);
于 2015-07-18T18:17:25.080 回答