JavaScript XPath和默認命名空間 [英] Javascript Xpath and default namespaces

查看:0
本文介紹了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

進一步閱讀:

您的小提琴:http://jsfiddle.net/chKZc/5/(更新)

這篇關于JavaScript XPath和默認命名空間的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持IT屋!

查看全文
登錄 關閉
掃碼關注1秒登錄
發送“驗證碼”獲取 | 15天全站免登陸
全免费A级毛片免费看无码播放