如何从中获取文档对象?
var xmlobject = (new DOMParser()).parseFromString(xmlstring, "text/xml");
在您的示例中,
xmlobject
是文档对象,根据MDC。根据 w3schools,在 IE 上,您需要使用 IE 特定的 ActiveX 对象而不是 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
不是 XML 中的特殊属性(“ID”类型的属性),因此即使您为元素提供 id
属性,getElementById
也不起作用(它应该返回 ) null
)。 getElementById
的 W3C 文档中有详细信息。我从未这样做过,但我假设您会通过 DTD 分配“ID”类型的属性。
如果没有,您可以使用其他遍历机制。例如(实时复制):
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
所做的那样)。如果没有,那么,它会很快变得复杂。)