需要 javascript/ajax 帮助

问题描述 投票:0回答:1

如何从中获取文档对象?

var xmlobject = (new DOMParser()).parseFromString(xmlstring, "text/xml");
javascript domparser
1个回答
0
投票

在您的示例中,

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
是一个很好的例子,说明了为什么我使用 jQueryClosurePrototypeYUI其他几个 等库来完成这些内容。你可能认为这很简单获取元素内部的文本,如果该元素内部恰好有一个文本节点,那么它就是(就像我们上面的 thing
 所做的那样)。如果没有,那么,
它会很快变得复杂。)

© www.soinside.com 2019 - 2024. All rights reserved.