如何从中获取文档对象?
var xmlobject = (new DOMParser()).parseFromString(xmlstring, "text/xml");
答案 0 :(得分:1)
在您的示例中,xmlobject
是文档对象according to MDC。根据{{3}},在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
)。 w3schools中的详细信息。我从来没有这样做过,但我假设您通过DTD为“ID”类型指定了一个属性。
但是,如果没有一个,您可以使用其他遍历机制。例如(W3C docs for getElementById
):
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
是我使用live copy,jQuery,Closure,Prototype或YUI等库的原因的一个很好的例子。你觉得把文本放在一个元素里会很简单,如果元素里面只有一个文本节点,那么就是 [正如我们的thing
所做的那样如果没有,那么,any of several others。)