//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(xmlNodes
.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
xmlNodes
.setAttribute('attrname', 'value');
to get attribute value
xmlNodes
.attributes.getNamedItem('attrname').value