JavaScript XPath和默认命名空间

原学程将引见JavaScript XPath以及默许定名空间的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

JavaScript XPath和默认命名空间 教程 第1张

成绩描写

我有1些JavaScript/XPath,它不克不及像我预期的这样任务。(available on jsfiddle)仿佛我对于1个XML定名空间做了1些毛病的工作,使我没法经由过程它们的节面(标志)称号盘问元素。

假如我测验考试盘问以后节面的一切子节面,我发明元素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

退1步浏览:

    https://developer.mozilla.org/en/DOM/document.createNSResolver

    https://developer.mozilla.org/en/Introduction_to_using_XPath_in_JavaScript()

    http://www.w三.org/TR/DOM-Level⑶-XPath/xpath.html#XPathNSResolver-lookupNamespaceURI

您的小提琴:http://jsfiddle.net/chKZc/五/()

佳了闭于JavaScript XPath以及默许定名空间的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。