JSFiddle - React, Tailwind, and code Playground
JavaScript
/* Variable Declarations */
var xml = '<rootElement xmlns="http://www.example.com#Th-Mar-8-11:48" xmlns:foo="http://whatever.com"><myElement>Test1</myElement><foo:myElement>Test1</foo:myElement></rootElement>';
var xmlDoc = new DOMParser().parseFromString(xml, "text/xml");
var rootElement = xmlDoc.documentElement;
var nsResolver = (function (element) {
var
nsResolver = element.ownerDocument.createNSResolver(element),
defaultNamespace = element.getAttribute('xmlns');
return function (prefix) {
return nsResolver.lookupNamespaceURI(prefix) || defaultNamespace;
};
} (xmlDoc.documentElement));
try {
var xpathResult, queryEl;
/* First try finding all children of the current node, rootElement */
xpathResult = xmlDoc.evaluate( "child::*", rootElement, nsResolver, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
if(queryEl = xpathResult.iterateNext()) {
console.log("child::* found element " + queryEl.nodeName);
}
else {
console.log("child::* found nothing!");
}
/* Now try getting only those children with nodeName `myElement` */
xpathResult = xmlDoc.evaluate( "child::default:myElement", rootElement, nsResolver, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
if(queryEl = xpathResult.iterateNext()) {
console.log("child::myElement found element " + queryEl.nodeName);
}
else {
console.log("child::myElement found nothing!");
}
/* Added a extra namespace for testing */
xpathResult = xmlDoc.evaluate( "child::foo:myElement", rootElement, nsResolver, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
if(queryEl = xpathResult.iterateNext()) {
console.log("child::foo:myElement found element " + queryEl.nodeName);
}
else {
console.log("child::foo:myElement found nothing!");
}
}
catch(e) {
console.log("Unable to parse Xml");
}