В общем, вы не можете поместить произвольный XML в документ HTML. Это недопустимый HTML, и парсеры браузера могут попытаться «исправить» поврежденный HTML, исказив ваши данные.
Вы можете встроить XML в HTML, используя <xml>
острова данных в IE, или используя native-XHTML с пользовательскими пространствами имен в других браузерах. Но, кроме проблемы совместимости двух разных методов, это не очень хорошая идея.
Кроме того, даже если это работает, обычные узлы XML Element
не имеют свойства innerHTML
в любом случае.
Вы можете встроить XML в JavaScript:
<script type="text/javascript">
var xml= '<nails><thumb id="foo">bar</thumb><thumb id="bof">zot</thumb></nails>';
var doc= parseXML(xml);
var nails= doc.getElementsByTagName('thumb');
for (var i = 0; i<nails.length; i++) {
alert(nails[i].getAttribute('id'));
}
function parseXML(s) {
if ('DOMParser' in window) {
return new DOMParser().parseFromString(s, 'text/xml');
} else if ('ActiveXObject' in window) {
var doc= new ActiveXObject('MSXML2.DOMDocument');
doc.async= false;
doc.loadXML(s);
return doc;
} else {
alert('Browser cannot parse XML');
}
}
</script>
Но это означает, что вы должны кодировать XML как строковый литерал JavaScript (например, используя кодер JSON, если вы делаете это динамически). В качестве альтернативы вы можете использовать XMLHttpRequest
для извлечения отдельного XML-документа с сервера: это более широко поддерживается, чем подход DOMParser
/ ActiveX.
Если вы просто используете XML для передачи данных в свой сценарий, вы найдете много более простых в написании литералов JavaScript для этого, вместо того, чтобы разбираться с анализом XML.
<script type="text/javascript">
var nails= [
{"id": "foo", "text": "bar"},
{"id": "bof", "text": "zot"}
];
for (var i = 0; i<nails.length; i++) {
// do something
}
</script>
Опять же, вы можете легко создать такую структуру данных, используя JSON-кодировщик, если вам нужно сделать это динамически.