Ric*_*uen 5 javascript xpath xml-namespaces
我有一些JavaScript/Xpath,它没有像我期望的那样工作.(在jsfiddle上可用)似乎我在使用XML命名空间时出错了,阻止我通过节点(标记)名称查询我的元素.
如果我尝试查询当前节点的所有子节点,我发现该元素myElement
没有问题:
var xpathResult = xmlDoc.evaluate( "child::*", rootElement, nsResolver, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
var queryEl;
if(queryEl = xpathResult.iterateNext()) {
alert("child::* found element " + queryEl.nodeName);
}
else {
alert("child::* found nothing!");
}
Run Code Online (Sandbox Code Playgroud)
...但是如果我专门针对具有myElement
节点(标记)名称的节点,我得不到任何结果:
/* Now try getting only those children with nodeName `myElement` */
xpathResult = xmlDoc.evaluate( "child::myElement", rootElement, nsResolver, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
var queryEl;
if(queryEl = xpathResult.iterateNext()) {
alert("child::myElement found element " + queryEl.nodeName);
}
else {
alert("child::myElement found nothing!");
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
试试这个作为你的解析器:
var nsResolver = (function (element) {
var
nsResolver = element.ownerDocument.createNSResolver(element),
defaultNamespace = element.getAttribute('xmlns');
return function (prefix) {
return nsResolver.lookupNamespaceURI(prefix) || defaultNamespace;
};
} (xmlDoc.documentElement));
Run Code Online (Sandbox Code Playgroud)
您还必须选择以下元素:
"child::default:myElement"
// where 'default' can be anything, as long as there is a namespace
Run Code Online (Sandbox Code Playgroud)
进一步阅读:
你的小提琴:http://jsfiddle.net/chKZc/5/ (更新)