I created an XML wrapper to easily access XML data. Please tell me what do you think about it.
- Performance
- Scalability
- Anything else...
This is how you use it:
var xml = new Xml(dataString);
xml.load("UserEmail");
alert(xml.length + ", " + xml.getValueAt(0)); // Out: 2, [email protected]
XML source file:
<Users>
<Users>
<UserEmail>[email protected]</UserEmail>
<UserPassword>
BA56E5E0366D003E98EA1C7F04ABF8FCB3753889
</UserPassword>
</Users>
<Users>
<UserEmail>[email protected]</UserEmail>
<UserPassword>
07B7F3EE06F278DB966BE960E7CBBD103DF30CA6
</UserPassword>
</Users>
</Users>
Source:
function Xml(xmlString) {
var parser = function() {
if (typeof window.DOMParser != "undefined") {
return (new window.DOMParser()).parseFromString(xmlString,
"text/xml");
}
else if (typeof window.ActiveXObject != "undefined"
&& new window.ActiveXObject("Microsoft.XMLDOM")) {
var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(xmlString);
return xmlDoc;
}
else {
throw new Error("XML parser not found");
}
};
var data = parser(xmlString);
var elements = null;
this.length = 0;
this.load = function(nodeName){
elements = data.documentElement.getElementsByTagName(nodeName);
this.length = elements.length;
};
this.getValueAt = function(index) {
if(!elements || index >= this.length){
return null;
}
var element = elements.item(index);
return element.childNodes[0].data;
};
}
-
\$\begingroup\$ It can usefully handle very simple XMLs. It doesn't retrieve the value of attributes. It gives worthless values for element nodes. It doesn't support a decent selector engine. If it's good for your purposes, use it. \$\endgroup\$MaxArt– MaxArt2012年06月23日 12:59:06 +00:00Commented Jun 23, 2012 at 12:59
-
\$\begingroup\$ "Would you write your own XML Parser? Only if you're f***ing crazy." secretgeek.net/csv_trouble.asp \$\endgroup\$David East– David East2012年06月23日 13:33:30 +00:00Commented Jun 23, 2012 at 13:33
-
\$\begingroup\$ @David pmpl nice one ;) \$\endgroup\$Babibu– Babibu2012年06月23日 13:40:55 +00:00Commented Jun 23, 2012 at 13:40
1 Answer 1
From a quick read :
Xml
seems like a bad name for your wrapper, you should consider something likexmlParser
?I would allow access to
data
andelements
by usingthis
instead ofvar
because you wrap so little of the XML parser APIthis.length
seems wrong ( the parser has no length), maybeloadedElementCount
, but even that is pretty bad, I would just let the caller useelements.length
.I would
return elements
inthis.load
, since that is pretty much what the caller would need next.You are not checking for falsey values of
nodeName
inthis.load
I would not create a
var element
in getValueAt, I would just returnelements.item(index).childNodes[0].data