Any web developer dealing with XML data knows about hard job he must implement in order to make things working perfectly in all browsers.
At time I wrote this libriary, I thought that IE is only browser with true XPATH support but when I finished, my attitude to Mozilla browsers changed to good.As a web developer, mostly client side scripting with advanced OOP JavaScript, I have been developing Ajax applications for IE. All was good until clients began to request cross-browser support. As any programmer, I am lazy, so I decided to write such cross-browser libriary in order to make my life easier and help other developers who are looking for ready solutions. You may ask me, why I did't use ready solutions like Sarrisa? Pehaps I wanted to make things even easier, making web developer spending less time on programming and more to have a pleassure outside job.Currently SoftXMLLib libriary API includes 9 methods and 6 properties to operate on XML Document. Here I will give brief explanation on each:
Firstly include SoftXMLLib libriary into head section of your html file:
Create SoftXMLLib object: var SoftXMLLib = new SoftXMLLib();
Methods
Example - load SoftXMLLib.load("yourfile.xml") if(SoftXMLLib.loadError!=0){ alert("XML file is invalid!"); return; }
Loads given XML file.Example - loadXML var xmlString = "id="5">some text"; SoftXMLLib.loadXML(xmlString) if(SoftXMLLib.loadXMLError!=0){ alert("XML string is invalid!"); return; }
Loads given XML string.Example - selectNodes When there is no default namespace in XML document var xmlString = "name="Microsoft">some text"; SoftXMLLib.loadXML(xmlString) var xpath = "//company[@id='2']/@name"; matchedNodes = SoftXMLLib.selectNodes(xpath) Selects nodes in loaded XML document that matched XPATH expression In this example we select company's name where company id = 2 Only one node is returned by query, so we can access it like this: alert(matchedNodes[0].attributes[0].name); Will output Microsoft alert(matchedNodes[0].self.getAttribute("name")); Will output same as above Microsoft When accessing attribute you can use one of following options: attributes[0].attributename; or self.getAttribute("attributename")
When there is default namespace in XML document Important note: Currently Opera does not support default namespace, so this query won't work You have to set two properties in order to use xpath in Mozilla browsers SoftXMLLib.setPrefix("xsl"); SoftXMLLib.setNameSpace("http://www.w3.org/1999/XSL/Transform"); var xmlString = ">idref="34_6">MicrosoftUSAid="2" idref="34_7">OracleUSA"; SoftXMLLib.loadXML(xmlString) var xpath = "//xsl:company"; matchedNodes = SoftXMLLib.selectNodes(xpath) In this example we select all company nodes in loaded XML document for(var i = 0;i < matchedNodes.length;i++){ //output value of id and idref attributes alert(matchedNodes[i].attributes[0].id + "=" + matchedNodes[i].attributes[0].idref); //will output 1 = 34_6 and 2 = 34_7
//output value of id attributes another approach alert(matchedNodes[i].self.getAttribute("id")); //will output 1 and 2
//output number of attributes for each company node alert(matchedNodes[i].self.attributes.length); //will output 2 and 2
//output tagName of current element alert(matchedNodes[i].self.nodeName); //will output xsl:company and xsl:company
//output data in childnodes of each company node alert(matchedNodes[i].self.getElementsByTagName("name")[0].childNodes[0].nodeValue); //will output Microsoft and Oracle
} Now we will change our xpath expression: var xpath = "//xsl:name"; matchedNodes = SoftXMLLib.selectNodes(xpath) In this example we select all name nodes in loaded XML document for(var i = 0;i < matchedNodes.length;i++){ //output text in name nodes alert(matchedNodes[i].innerText); //will output Microsoft and Oracle
} Now we will get all attributes in document: var xpath = "//@*"; matchedNodes = SoftXMLLib.selectNodes(xpath) for(var i = 0;i < matchedNodes.length;i++){ //output attribute name and attribute value alert(matchedNodes[i].self.nodeName + "=" + matchedNodes[i].self.nodeValue); //will output id=1 , idref=34_6 , id=2 , idref=34_7
} Example - getDocAttributes This method returns all attributes found in XML document matchedNodes = SoftXMLLib.getDocAttributes() for(var i = 0;i < matchedNodes.length;i++){ //output attribute name and attribute value alert(matchedNodes[i].nodeName + "=" + matchedNodes[i].nodeValue); //will output id=1 , idref=34_6 , id=2 , idref=34_7
} Example - getUniqueAttributes This method returns only names of unique attributes found in XML document matchedNodes = SoftXMLLib.getUniqueAttributes() for(var i = 0;i < matchedNodes.length;i++){ //output attribute name alert(matchedNodes[i].nodeName); //will output id, idref
} Example - getDocElements This method returns names of all elements as they appear in XML document matchedNodes = SoftXMLLib.getDocElements() for(var i = 0;i < matchedNodes.length;i++){ //output element name alert(matchedNodes[i].nodeName); //will output xsl:company, xsl:name, xsl:location,.....
} Example - getUniqueElements This method returns names of unique elements in XML document matchedNodes = SoftXMLLib.getUniqueElements() for(var i = 0;i < matchedNodes.length;i++){ //output element name alert(matchedNodes[i].nodeName); //will output xsl:company, xsl:name, xsl:location
} Example - Encode This method returns ASC code of string passed to it char by char Use this method with Ajax when you need to transfer content of xml tags in other then english language var xmlString = 'name="Microsoft">' + SoftXMLLib.Encode("not english text") + ''; SoftXMLLib.loadXML(xmlString) ajaxObj = SoftXMLLib.createAjaxObject(); ajaxObj.open("POST","http://www.yourserver.com/testAjax.asp",true); ajaxObj.onreadystatechange=function() { if (ajaxObj.readyState==4) { alert(ajaxObj.responseText); } } ajaxObj.send(softXMLLib.DOM);
In order to send XML data with XMLHTTP object you have to use DOM property of SoftXMLLib objectExample - Decode This method returns string from ASC code passed to it Use this method with Ajax when you need to get content of xml tags in other then english language
Gregory Movsesyan has sinced written about articles on various topics from Software. Speciality:Internet Programmer (6 years of experiencein scripting languages and VB ).Education:1992-1995: Bar-Ilan University, Ramat Gan.Field of Specialization:Operating Systems: Windows NT, Windows XP/200. Gregory Movsesyan's top article . to your Favourites.