2010-04-06 53 views
1

我正在創建一個讀取XML文檔並創建用於更新文檔的輸入表單的Xform。但是,顯然是由於命名空間問題,我的Xpath表達式無法解析。當實例文件沒有命名空間時,我的表單可以很好地處理簡單實例。 但是,我需要名稱空間支持。xforms「instance namespace」問題

我的實例文件有一個名稱空間「ai:inventory」。

我引用的實例數據

應該在哪裏我可以聲明前綴「AI」爲我的命名空間,以便我的XPath表達式可以找到相應的元素呢?/ai:庫存/產品?

我已經嘗試在html開始標記中創建前綴...沒有幫助。

感謝,

+0

向我們展示一個仍然存在命名空間問題的非常簡單的「實例」。 – 2010-04-06 03:34:22

回答

0

一般命名空間聲明適用於當前元素和所有元素遞減。如果您需要在模型和視圖中使用相同的命名空間,那麼html標記是一個不錯的選擇。事情是這樣的:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ai="yournamespace"> 
    <head> 
    <xf:model> 
     <xf:instance xmlns=""> 
     <ai:inventory> 
      <product>Hello</product> 
     </ai:inventory> 
     </xf:instance> 
    </xf:model> 
    </head> 
    <body> 
    <xf:output ref="/ai:inventory/product"/> 
    </body> 
</html> 

請記住,如果你使用的情況下非命名空間的元素,還可以使用XHTML作爲默認的名稱空間,那麼你需要重新聲明默認命名空間的xmlns =「」,如示例中所示。

1

的XForms實例是在自己的權利的XML文檔,所以你應該包括適當的名稱空間聲明表單中的每一個實例:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ai="http://example.com/"> 
    <head> 
    <xf:model> 
     <xf:instance> 
     <ai:inventory xmlns="" xmlns:ai="http://example.com/"> 
      <product>foo</product> 
     </ai:inventory> 
     </xf:instance> 
    </xf:model> 
    </head> 
    <body> 
    <xf:output ref="/ai:inventory/product"/> 
    </body> 
</html> 

有一些處理器,這將如果您的實例正確評價的XPath是內聯的(而不是外部資源),但我不建議依賴這種行爲。

0

兩個答案都被糾正了。但是,我發現我的問題與使用xsltforms xsl樣式表呈現我的xform有關。當我切換到orbeon時,一切正常。

+0

Firefox仍不支持名稱空間軸,XSLTForms包含名稱空間的(不完美)解決方法。在某些情況下甚至需要添加虛擬元素或屬性。 您正在使用哪種瀏覽器? – 2011-04-11 08:51:45