Javascript Xpath and default namespaces(JavaScript XPath和默认命名空间)
本文介绍了JavaScript XPath和默认命名空间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一些JavaScript/XPath,它不能像我预期的那样工作。(available on 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!");
}
.但是,如果我专门以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!");
}
我做错了什么?
推荐答案
尝试将此作为您的解析程序:
var nsResolver = (function (element) {
var
nsResolver = element.ownerDocument.createNSResolver(element),
defaultNamespace = element.getAttribute('xmlns');
return function (prefix) {
return nsResolver.lookupNamespaceURI(prefix) || defaultNamespace;
};
} (xmlDoc.documentElement));
您还必须选择如下元素:
"child::default:myElement"
// where 'default' can be anything, as long as there is a namespace
进一步阅读:
- https://developer.mozilla.org/en/DOM/document.createNSResolver
- https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript(=>实现默认命名空间解析器)
- http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathNSResolver-lookupNamespaceURI
您的小提琴:http://jsfiddle.net/chKZc/5/(更新)
这篇关于JavaScript XPath和默认命名空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:JavaScript XPath和默认命名空间
基础教程推荐
猜你喜欢
- 逻辑运算符 ||在 javascript 中,0 代表 Boolean false? 2022-01-01
- 从快速中间件中排除路由 2022-01-01
- HTML5 画布调整为父级 2022-01-01
- 使用 jQuery 在悬停时交换 DIV 类 2022-01-01
- 即使每次插入第一个输入的值不同,第二个输入仍显示相同的输入值 2022-01-01
- 最佳动态 JavaScript/JQuery 网格 2022-01-01
- 当木偶师打开Chrome时,不能使用Chrome扩展 2022-01-01
- CORS:当凭据标志为真时,无法在 Access-Control-Allow-Origin 中使用通配符 2022-01-01
- 带角度的选项卡:仅使用 $http 在单击时加载选项卡 2022-01-01
- 在 Javascript 中使用 Fetch API 上传文件并显示进度 2022-01-01
