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>

xslt によって処理された各 html 要素を行項目からtr tdに console.log します

解決済み:

ありがとう、マーティン・ホネン!

transformToFragment(sourceDoc, ownerDoc) 

動作します!

回答を投稿してください。

4

1 に答える 1

2

私が理解している限りでは、ブラウザー自体によって提供される XSLTProcessor の実装がある Mozilla ブラウザーや Chrome などのブラウザーでは、Sarissa で使用するオブジェクトはブラウザーのネイティブ実装です。したがって、ターゲットとするブラウザーが Firefox だけである場合は、transformToFragment次のように単純に使用することをお勧めします。

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