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