是否可以使用XPath(1.0)來返回XML文檔中的命名空間節點?XPath可以用於返回節點上的名稱空間嗎?
注意:我不是要求具有給定名稱空間的節點,而是名稱空間節點本身。所以不是:
//node()[namespace-uri()='http://a.b']
是否可以使用XPath(1.0)來返回XML文檔中的命名空間節點?XPath可以用於返回節點上的名稱空間嗎?
注意:我不是要求具有給定名稱空間的節點,而是名稱空間節點本身。所以不是:
//node()[namespace-uri()='http://a.b']
如果名稱空間軸被實現(Firefox/Mozilla拒絕這樣做),那麼//namespace::node()
會爲您提供所有名稱空間節點。但需要注意的XSLT/XPath數據模型命名空間節點來自命名空間聲明不同屬性的XML文檔中,用標記
<root xmlns="http://example.com/ns">
<foo>
<bar>baz</bar>
</foo>
</root>
所有三個要素各有兩個範圍的命名空間節點,在宣佈一個默認根元素和xml
命名空間的內置元素。
在XPath 1.0中有一個namespace::
軸,所以你可以。在2.0中,它被棄用,只能在兼容模式下工作。但是,您可以查詢範圍內的所有名稱空間綁定/前綴。
依賴實際的命名空間節點通常不是一個好主意,儘管有時它是不可避免的。請注意,namespace::
軸包含所有在該元素範圍內的名稱空間節點。要找到綁定在該特定元素上的元素,必須將您的節點列表與父元素的作用域中的名稱空間進行比較。
你知道它爲什麼不推薦嗎? –
@ peter.murray.rust我只能猜測,但我認爲這是因爲這是一個非常脆弱的想法。首先,名稱空間綁定應該在XSLT級別上真正透明。更糟糕的是,單個名稱空間綁定被克隆爲它出現的元素的每個後代的新名稱空間節點。這可能相當混亂。 – biziclop
在XPath 2.0中不推薦使用名稱空間軸,因爲XQuery人員的主要影響力並未看到它的需求。它在XSLT 2.0中不被棄用:相反,它是一個「可選功能」。我對可選功能的定義是一種功能,您可以在一個良好的實現中找到它,並且不會在糟糕的實現中找到它。 –