2015-07-18 2 views
0

Я с помощью XML + XSL в браузере и обработка асинхронных страниц в JavaScript, но не может добавлять XML обрабатывается тр элемента в таблицу TBODY, потому что строка элементы выглядят как обычный текст. Я нахожу некоторые взломать, чтобы исправить это с копированием innerHTML (функция convertChild):Добавить XML-элемент документа в HTML таблицы

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) 

работ!

Пожалуйста, напишите ответ.

+0

Какой браузер (ы) вы используете? Как выглядит XML, убедитесь, что вы создаете элементы результата HTML с XSLT, либо убедитесь, что у вас есть полный HTML-документ с ' ...' и ' 'или, убедившись, что это фрагмент XHTML с' xmlns = "http://www.w3.org/1999/xhtml" '? Не делает ли Sarissa не такую ​​функцию, как «transformToFragment» Mozilla? –

+1

В соответствии с http://dev.abiss.gr/sarissa/jsdoc/symbols/XSLTProcessor.html#constructor существует метод 'transformToFragment (sourceDoc, ownerDoc)', поэтому я бы предложил попробовать var varDoc = pageProcessor.transformToFragment (xml, document); 'и, надеюсь, вы сможете« appendChild »узлы из« resultDocument »в потомок' tbody' вашего документа HTML. –

+0

Ну с Firefox элемент 'tr' - это только элемент' tr' HTML, если он создан в документе HTML или фрагменте документа, или если он создан в пространстве имен XHTML 'http://www.w3.org/1999/ xhtml'. В противном случае это неизвестный элемент XML, который имеет локальное имя 'tr'. –

ответ

2

Я думаю, насколько я понимаю, в браузерах, таких как браузеры Mozilla или как Chrome, где есть реализация XSLTProcessor, предоставляемая самим браузером, объект, который вы используете с Sarissa, является встроенной версией браузера. Поэтому я хотел бы предложить, если Firefox является единственным браузером вы цель, чтобы просто использовать transformToFragment следующим образом:

var resultFragment = pageProcessor().transformToFragment(xml, document); 
document.getElementById('table-content').appendChild(resultFragment); 
Смежные вопросы