我需要創建一個XML xPath解析器。所有解析都必須在客戶端發生(使用javascript)。我創建了一個可以做到這一點的JavaScript,並且一切都很順利,直到默認命名空間開始發揮作用。我根本無法查詢具有默認命名空間的XML。在javascript中使用xPath解析XML並使用默認命名空間
我在小提琴上創建了一個示例代碼。 xmlString是從服務器接收到的XML字符串。在xPathString中是對收到的XML進行查詢。
這裏是一些假設:
- http://jsfiddle.net/BF34q/1/ - 沒有命名空間 - 一切正常OK
- http://jsfiddle.net/BF34q/2/ - NS添加了命名空間。元素有ns:前綴。 xPath使用此前綴 - 確定
- http://jsfiddle.net/BF34q/3/ - 使用的默認名稱空間 - 不確定如何配置xPathString。
注意,別人會用這個解析器,所以我真的想避免解決方案,如
var xPathString = "//*[local-name()='book']";
,讓他們使用簡單的XPath表達式解析它。我想知道是否有可能在JavaScript中分配默認命名空間前綴?
注意:在提琴上提供的示例在IE中不起作用。
可以省略前綴命名空間,然後該命名空間被認爲是默認的命名空間。以下是一些示例和說明:http://www.w3schools.com/xml/xml_namespaces.asp,http://www.developerfusion.com/article/3720/understanding-xml-namespaces/5/ – dugokontov
@dugokontov,I認爲你很困惑**沒有命名空間**和**默認命名空間**。在XML文檔中,您使用'xmlns =「something」'設置默認名稱空間,所以沒有前綴。默認情況下,默認名稱空間**是空白名稱空間(無名稱空間)。默認名稱空間取決於上下文; XPath在這裏不會例外。通過不指定任何帶有XPath表達式的前綴並且不註冊任何名稱空間,OP的表達式很可能與沒有名稱空間的節點相匹配。 – Lumi
你只是傷了我在我的評論中所做的一樣:_在XML文檔中,使用xmlns =「something」設置默認名稱空間,所以沒有prefix_ == _您可以省略名稱空間的前綴,然後該名稱空間被視爲默認namespace_。另外,你的最後一句中的場景在我提供的第一個例子中描述:http://jsfiddle.net/BF34q/1/。所以,我有點困惑,你想對我說什麼? – dugokontov