閱讀517 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Xpath in JavaScript (第二部分【命名空間】)

        在上一篇文章中,我們介紹了在Firefox, Safari, Chrome, and Opera支持的DOM Level 3 XPath,但是我們沒有談關於命名空間在Xpath中的解決方案。如果你隻是使用xpath在html文檔中簡單的查詢,evaluate()中的命名空間解析器參數一般為null,如果你傾向於使用xpath在包含命名空間的xml文檔中查詢,那麼你應該學會怎樣創建和使用命名空間解析器。

 

         除了默認的命名空間以外,每個命名空間URI都映射到一個指定的前綴。每一個命名空間解析器是為xpath引擎在命名空間前綴和命名空間uri之間進行映射。有兩種生成命名空間解析器的方法,第一種如下:創建一個接受命名空間前綴作為參數的方法,然後返回對應的url ,如下: function resolver(prefix){ switch(prefix){ case "wrox": return "https://www.wrox.com/"; case "ncz": return "https://www.nczonline.net/"; default: return "https://www.yahoo.com/"; } }

第二種使用一個包含命名空間信息的節點,來生成一個命名空間解析器。

<books xmlns:wrox="https://www.wrox.com/" xmlns="https://www.amazon.com/"> <wrox:book>Professional JavaScript</book> </books>

<books>元素包含了所有的命名空間信息,你可以把這個節點的引用傳給XPathEvaluator對象的createNSResovler()方法,然後可以自動的得到一個命名空間解析器。
如:

var evaluator = new XPathEvaluator(); var resolver = evaluator.createNSResolver(xmldoc.documentElement);

使用上麵的任意一個方法可以很容易的在含有命名空間xml文檔中進行查詢。

var evaluator = new XPathEvaluator(); var resolver = evaluator.createNSResolver(xmldoc.documentElement); var result = evaluator.evaluate("wrox:book", xmldoc.documentElement, resolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null); if (result){ alert(result.singleNodeValue.firstChild.nodeValue); }

注意:如果你在含有命名空間的xml文當中執行查詢,不提供命名空間解析器,就會發生錯誤。

最後更新:2017-04-02 03:13:28

  上一篇:go proxool數據庫連接池使用實例
  下一篇:go java麵試題目