开发者

getElementById for XML Documents, Mozilla extensions

Is document.getElementById method s开发者_C百科upported on DOM parsed from XML strings using the DOMParser method in Mozilla? I am making a Mozilla extension that reads an XML file and uses DOM Parser to convert the XML into a DOM element and tries getting elements by Id. The method getElementsByTagName works but not getElementById. It always returns null.

function (xmlString) {
    var parser = new DOMParser();
    var doc = parser.parseFromString(xmlString, "text/xml"); 
    var aNodes = doc.getElementsByTagName("nodeTag");
    for(var i=0; i<aNodes.length; ++i) {
        var id = aNodes[i].getAttribute('id');
        var resultNode = doc.getElementById(id);
        alert(id);
        alert(resultNode);
    }
}

I tried the above code. alert(id) returns the proper id, whereas alert(resultNode) returns null every time.


No, document.getElementById doesn't generally work on arbitrary XML documents.

In recent browsers (e.g. Firefox 3.5 and later), you can use document.querySelector instead:

var resultNode = doc.querySelector("[id=" + id + "]");


If you would like a solution that actually makes the getElementById() method usable (which you should, It is much much faster, and more versatile) and you have access to the DTD add the following line to it:

<!ATTLIST client id ID #IMPLIED >

If you aren't using a DTD yet, just add this to the xml document directly after the <?xml version= \"1.0\"?> statement:

<!DOCTYPE clients [ 
   <!ATTLIST client id ID #IMPLIED > 
]>

In this example "clients" is the root of my xml file, and "client" is the element i would like to attach id's to. You can add multiple "ATTLIST" statements for other elements you would like to add id's to other types of elements.

I tested this in safari, chrome, and firefox. works perfectly.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜