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.
精彩评论