2010-12-09 174 views
2

鑑於以下XML:撒克遜Xpath的命名空間

<Document xmlns="urn:company.com:catalog.01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <book> 
     <author>Wells</author> 
    </book> 
</Document> 

使用Xerces以下XPath查詢工作:

//urn:company.com:catalog.01:author 

當我使用撒克遜(V 8.7)我一個StaticError與消息「無效的QName地方部分{company.com:catalog ....}'。

Xpath查詢應該如何獲得作者的價值?

回答

0

的Xerces不應允許像

//urn:company.com:catalog.01:author 

的XPath XPath表達式是XML名稱柔順的,所以一個:(結腸)在一個QName劃分前綴部從QName的本地名稱的一部分。

有XPath中沒有語法使用的名稱測試完整的擴展的QName:

你可以使用

//*[local-name()='author'][namespace-uri()='urn:company.com:catalog.01'] 
+0

那麼這個xmlns甚至有效嗎? – fransvn 2010-12-09 15:43:38

+0

@drifwood:是的,實際上任何字符串都是有效的命名空間URI,除了它應該是有效的URI。 – 2010-12-09 15:48:41

0

你不發表您的XSL文件。我通過這個去最近和解決方案是確保XSL文件中有這樣一行:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:c="urn:company.com:catalog.01"> 

然後你引用在XML文件中的元素的前綴爲「C:」:

//c:author