2011-01-27 75 views
0

我試圖運行此代碼:Orbeon的itemset元素的實現不能使用名稱空間遍歷元素?

<xforms:select1 xmlns:xbl="http://www.w3.org/ns/xbl" 
              xmlns:fb="http://orbeon.org/oxf/xml/form-builder" 
              xmlns:pipeline="java:org.orbeon.oxf.processor.pipeline.PipelineFunctionLibrary" 
              appearance="xxforms:tree" 
              bind="retrievalControl-bind" 
              id="retrievalControl-control-laidOut"> 
<xforms:label ref="$form-resources/retrievalControl/label"/> 
<xforms:help ref="$form-resources/retrievalControl/help"/> 
<xforms:itemset nodeset="instance('fr-form-instance')/retrievalSection/retrievalControl/*/*/APP"> 
    <xforms:label ref="NAME"/> 
    <xforms:value /> 
</xforms:itemset> 

其中retrievalControl包含此文件:

<?xml version="1.0" encoding="utf-8"?><jax-rx:results xmlns:jax-rx="http://jax-rx.sourceforge.net"><jax-rx:result><APP count="1"> 
     <NAME>ABCD</NAME> 
     <ID>12</ID> 
    </APP> 
</jax-rx:result></jax-rx:results> 

但它不工作(沒有用於選擇1創建的項目)。如果我刪除/ */*/APP,以便將整個文檔打印爲項目標籤(通過將標籤修改爲ref =「。」,它將數據發送出去。遍歷低於該具有JAX-RX指定爲納秒的元素......任何變通辦法(查詢工作正常的XMLSpy)

更新基於最早響應(1月27日):

<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml" 
     xmlns:xforms="http://www.w3.org/2002/xforms" 
     xmlns:xxforms="http://orbeon.org/oxf/xml/xforms" 
     xmlns:ev="http://www.w3.org/2001/xml-events" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     xmlns:fr="http://orbeon.org/oxf/xml/form-runner"> 
<xhtml:head> 
    <xforms:model> 
     <xforms:instance> 
      <instance> 
       <weird/> 
      </instance> 
     </xforms:instance> 
     <xforms:instance id="fr-form-instance"> 
      <form> 
       <retrievalSection> 
        <retrievalControl> 
         <jax-rx:results xmlns:jax-rx="http://jax-rx.sourceforge.net"> 
          <jax-rx:result> 
           <APP count="1"> 
            <NAME>ABCD</NAME> 
            <ID>12</ID> 
           </APP> 
          </jax-rx:result> 
         </jax-rx:results> 
        </retrievalControl> 
       </retrievalSection> 
      </form> 
     </xforms:instance> 
     <xforms:bind id="fr-form-binds" nodeset="instance('fr-form-instance')"> 
      <xforms:bind id="retrievalSection-bind" nodeset="retrievalSection" name="retrievalSection"> 
       <xforms:bind id="retrievalControl-bind" nodeset="retrievalControl" name="retrievalControl"/> 
      </xforms:bind> 
     </xforms:bind> 
     <xforms:submission resource="http://AURLWhereOurExampleDataFileIsAvailale" 
          method="get" 
          id="getData" 
          replace="text" 
          instance="fr-form-instance" 
          targetref="/instance/weird" 
          serialization="none"> 
      <xforms:message ev:event="xforms-submit-error" level="modal">A submission error occurred:<xforms:output value="event('error-type')"/> 
      </xforms:message> 
     </xforms:submission> 
     <xforms:send ev:event="xforms-ready" submission="getData"/> 
    </xforms:model> 
</xhtml:head> 
<xhtml:body> 
    <xforms:select1 xmlns:xbl="http://www.w3.org/ns/xbl" 
        xmlns:fb="http://orbeon.org/oxf/xml/form-builder" 
        xmlns:pipeline="java:org.orbeon.oxf.processor.pipeline.PipelineFunctionLibrary" 
        appearance="xxforms:tree" 
        bind="retrievalControl-bind" 
        id="retrievalControl-control-laidOut"> 
     <xforms:itemset nodeset="instance('fr-form-instance')"> 
      <!--<xforms:itemset nodeset="instance('fr-form-instance')/retrievalSection/retrievalControl/*/*/APP">--> 
      <!--<xforms:itemset nodeset="instance()/*/*/APP">--> 
      <xforms:label ref="."/> 
      <xforms:value/> 
     </xforms:itemset> 
    </xforms:select1> 
</xhtml:body> 

我根據下面的第一個響應進一步調查了問題,問題似乎不是機智h用命名空間解析元素的能力,但也許與XForms提交的實現方式有關(或者我的理解很差,在這種情況下,我通過對這個問題的迴應來糾正)。 XForms提交的問題是在嘗試replace =「text」時發生錯誤的實例替換,但可能也會影響replace =「instance」,它會出現替換髮生在a)僅在默認實例上,並且b)與規範(從http://www.w3.org/TR/xforms11/#submit-data-replacement):

如果替換屬性包含值「text」並且提交響應符合XML媒體類型(由[RFC 3023]中的內容類型說明符定義)或文本媒體類型(由text/*的內容類型說明符定義),則響應數據被編碼爲文本並替換替換目標節點的內容。

好的,這可以通過在select1中的項目標籤中填充實例的全部內容來證明,請注意,上面的提交ID getData試圖替換一個甚至不存在於參考的實例ID中的targetref ,但它是有效的(如果我正確地爲所引用的實例ID放置targetref,則它不起作用;換句話說,它只在targetref指向'default'實例中的有效節點時才起作用(恰好是第一個實例),而不是引用的實例ID 即使它工作,它也不會替換targetref節點中的內容(我不知道它在哪裏(Orbeon的提交替換機制)放置該內容,我只知道它將該內容放置在默認實例中的某處,但在哪裏 - 在新創建的文本節點中?)

您需要將提交資源修改爲示例數據文件可用的URL,抱歉無法使其更爲獨立。

+0

如果由於某種原因,您應該能夠編輯您的問題,請將其標記爲供版主注意。 – 2011-02-09 12:32:24

+0

編輯我的問題很好,但編輯問題的標題,不這麼認爲...... – user557060 2011-02-17 11:20:41

回答

0

XForms 1。1說約targetref

「提交元素用於 的 的在範圍內的評估上下文計算表達式」。

你在你的例子寫:

<xforms:submission resource="http://AURLWhereOurExampleDataFileIsAvailale" 
        method="get" 
        id="getData" 
        replace="text" 
        instance="fr-form-instance" 
        targetref="/instance/weird" 
        serialization="none"> 

instance屬性不會修改調查範圍內的評價上下文(據我可以讀取規格),所以這裏targetref它不是相對於instance屬性,而是提交的範圍內評估上下文,由於您未指定ref屬性,因此它是默認(第一個)實例。

基本上,如果您使用targetref,請不要使用instance,因爲這樣會引起混淆。因此刪除instance屬性,並編寫targetref="instance('fr-form-instance')/weird"

現在,如果您使用上述更新示例執行此操作,您將獲得一個xforms-submit-error,因爲該節點在第二個實例中不存在。

讓我們看看這是否讓你更進一步。

0

我懷疑<retrievalControl>並不像您期望的那樣包含<jax-rx:results>。如果我創建了一個將所粘貼的部分放在一起的獨立示例,則所有內容都按預期工作(請參見下文)。你會有一個完整的(儘可能少的)例子來重現這個嗎?

<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml" 
      xmlns:xforms="http://www.w3.org/2002/xforms" 
      xmlns:xxforms="http://orbeon.org/oxf/xml/xforms" 
      xmlns:ev="http://www.w3.org/2001/xml-events" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:fr="http://orbeon.org/oxf/xml/form-runner"> 
    <xhtml:head> 
     <xforms:model> 
      <xforms:instance> 
       <instance> 
        <select1/> 
        <jax-rx:results xmlns:jax-rx="http://jax-rx.sourceforge.net"> 
         <jax-rx:result> 
          <APP count="1"> 
           <NAME>ABCD</NAME> 
           <ID>12</ID> 
          </APP> 
         </jax-rx:result> 
        </jax-rx:results> 
       </instance> 
      </xforms:instance> 
     </xforms:model> 
    </xhtml:head> 
    <xhtml:body> 
     <xforms:select1 xmlns:xbl="http://www.w3.org/ns/xbl" 
         xmlns:fb="http://orbeon.org/oxf/xml/form-builder" 
         xmlns:pipeline="java:org.orbeon.oxf.processor.pipeline.PipelineFunctionLibrary" 
         appearance="xxforms:tree" 
         ref="select1" 
         id="retrievalControl-control-laidOut"> 
      <xforms:itemset nodeset="instance()/*/*/APP"> 
       <xforms:label ref="NAME"/> 
       <xforms:value/> 
      </xforms:itemset> 
     </xforms:select1> 
    </xhtml:body> 
</xhtml:html> 
+0

也許你是正確的,但我懷疑這是一個錯誤在XFORM:提交作品在Orbeon(或我的理解相同是'越野車'),詳細信息在我更新的原始文章中。 – user557060 2011-01-28 11:59:58