В вашем примере xmlobject
- это объект документа, в соответствии с MDC . Согласно w3schools , в IE вам нужно использовать объект ActiveX, специфичный для IE, вместо DOMParser
:
var xmlDoc, parser;
if (window.DOMParser) {
parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");
}
else { // Internet Explorer
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(text);
}
Вы сказали, что getElementById
не работает. Обратите внимание, что id
не является специальным атрибутом (атрибутом типа "ID") в XML по умолчанию, поэтому даже если вы даете элементам атрибут id
, getElementById
не будет работать (он должен возвращать null
). Подробности в W3C документах для getElementById
. Я никогда не делал этого, но я предполагаю, что вы назначите атрибуту тип ID через DTD.
Однако без него вы можете использовать другие механизмы обхода. Например ( живая копия ):
var xmlDoc, parser, text, things, index, thing;
text =
'<test>' +
'<thing>Thing 1</thing>' +
'<thing>Thing 2</thing>' +
'</test>';
if (window.DOMParser) {
parser = new DOMParser();
xmlDoc = parser.parseFromString(text,"text/xml");
}
else { // Internet Explorer
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(text);
}
things = xmlDoc.documentElement.getElementsByTagName('thing');
for (index = 0; index < things.length; ++index) {
thing = things.item(index);
display(index + ": " + getText(thing));
}
... где getText
:
function getText(element) {
return textCollector(element, []).join("");
}
function textCollector(element, collector) {
for (node = element.firstChild; node; node = node.nextSibling) {
switch (node.nodeType) {
case 3: // text
case 4: // cdata
collector.push(node.nodeValue);
break;
case 8: // comment
break;
case 1: // element
if (node.tagName == 'SCRIPT') {
break;
}
// FALL THROUGH TO DEFAULT
default:
// Descend
textCollector(node, collector);
break;
}
}
return collector;
}
(getText
- хороший пример того, почему я использую такие библиотеки, как jQuery , Closure , Prototype , YUI или любой из нескольких других для этого материала. Вы могли бы подумать, что было бы просто получить текст внутри элемента, и равно , если элемент имеет ровно один текстовый узел внутри него [ как это делают наши thing
выше. Если это не так, ну, быстро усложняется .)