Добавить элемент документа 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);
Другие вопросы по тегам