Cross Browser SelectNodes and SingleNodes , attribute on xml document

 //extending documentelement for selectnodes
if (!window.ActiveXObject) {

    Element.prototype.selectNodes = function(sXPath) {

        var oEvaluator = new XPathEvaluator();

        var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);

        var aNodes = new Array();

        if (oResult != null) {

            var oElement = oResult.iterateNext();

            while (oElement) {

                aNodes.push(oElement);

                oElement = oResult.iterateNext();

            }

        }

        return aNodes;

    }

    Element.prototype.selectSingleNode = function(sXPath) {

        var oEvaluator = new XPathEvaluator();

        // FIRST_ORDERED_NODE_TYPE returns the first match to the xpath.

        var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);

        if (oResult != null) {

            return oResult.singleNodeValue;

        } else {

            return null;

        }

    }

}

 //when you have result

function dosomethingthengetresult(istrresult,strulr)

{

 var xmlDoc = loadXMLDoc(strResult);
    var xmlNodes = SelectNodes(xmlDoc, '/root/child');
    for (var i = 0; i < xmlNodes.length; i++) {
        alert(GetValueofNode(xmlNodes,i));
        alert(GetSomeId(xmlNodes,i));
        
    }

}

//example of getting value of node

function GetValueofNode(xmlNodes,index) {
    if (window.ActiveXObject)
        return xmlNodes[index].nodeTypedValue;
    else
        return xmlNodes[index].textContent;
}

//example of getting atribute
function GetSomeId(xmlNodes, index) {
    if (window.ActiveXObject)
        return xmlNodes[index].attributes[0].nodeTypedValue;
    else
        return xmlNodes[index].attributes[0].nodeValue;
}

function SelectNodes(xmlDoc, elementPath) {
    if (window.ActiveXObject || window.opera)
        return xmlDoc.selectNodes(elementPath);
    else
        return xmlDoc.documentElement.selectNodes(elementPath);       
}

 

4/3/2008

On Opera you can get the value like ex:

var xmlNodes = xmlDoc.selectNodes("//item");
    for (var i = 0; i < xmlNodes.length; i++) {
        alert(xmlNodesIdea.firstChild.nodeValue);
       
    }

I should warn about setAttribute , attributes ,setAttributeNode

it's buggy. you can see the reference 
here and
here

 

after i do a simple test it runs on all browser,

to set attribute

xmlNodesIdea.setAttribute('attrname', 'value');

to get attribute value

xmlNodesIdea.attributes.getNamedItem('attrname').value

Share this post: | | | |
Published Friday, February 20, 2009 9:57 AM by cipto
Filed under:

Comments

No Comments