Добавить элемент документа xml в таблицу html
Я использую 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 возвращает XSLTProcessor с импортированной таблицей стилей xsl. Переменная xml является документом библиотеки Sarissa. В отладчике 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 каждый элемент HTML обрабатывается xslt из элемента строки в tr td
Решено:
Спасибо, Мартин Хоннен!
transformToFragment(sourceDoc, ownerDoc)
работает!
Пожалуйста, оставьте ответ.
1 ответ
Я думаю, насколько я понимаю, в браузерах, таких как браузеры Mozilla или Chrome, где есть реализация XSLTProcessor, предоставляемая самим браузером, объект, который вы используете с Sarissa, является нативной реализацией браузера. Так что я бы предложил, если Firefox - единственный браузер, на который вы ориентируетесь, просто использовать transformToFragment
следующее:
var resultFragment = pageProcessor().transformToFragment(xml, document);
document.getElementById('table-content').appendChild(resultFragment);