2010-11-23 49 views
0

我正在使用orbeon,並且正在嘗試讀取XBL中定義的子元素。這裏是我的xform定義看起來像Simple Xpath - 讀取XBL中的子元素

<fr:foobar ref="mynode" constraint="unique"> 
    <fr:foo from="abc" to="def"> 
    <fr:bar key="id" name="primary" /> 
    </fr:foo> 
</fr:foobar> 

在XBL中我似乎無法找到一個簡單的方法來讀取子元素。我顯然缺少一些簡單的東西。

<xforms:group xxbl:scope="inner"> 
    <!-- works --> 
    <xxforms:variable name="foocontext"> 
     <xxforms:sequence select="{fr:foo/@from}" xxbl:scope="outer" /> 
    </xxforms:variable> 

    <!-- does not works -->  
    <xxforms:variable name="barcontext" as="node()?"> 
     <xxforms:sequence select="{fr:foo/fr:bar}" xxbl:scope="outer" /> 
    </xxforms:variable> 
</xforms:group> 
+0

我發佈了一個問題形式的答案,如果你可以反過來更新你的問題來澄清幾點,它會更新它。 – avernet 2010-11-24 01:32:41

回答

1

AVT總是返回文本。所以{fr:foo/fr:bar}相當於{string(fr:foo/fr:bar)},在這種情況下,它不會做你期望的。這是一個棘手的問題,我看到兩種解決方案:

  1. 不要定義該XForms變量。而是遍歷XSLT中的結構,並生成想要生成的任何XForms。這是「最有可能」最好的出路(但不要相信我說的話,因爲我甚至不知道你在做什麼!)。
  2. 如果您確實需要該變量,則需要將這些<fr:bar>元素複製到帶有XSLT的實例(<xsl:copy-of>)中,然後使用<xxforms:variable>指向該實例中的節點。
+0

這些都是簡單的事情,但令人大開眼界,因爲我無法從基礎知識入手。我認爲$ barcontent的值是fr:bar節點,我打算通過$ barcontent/@ id檢索屬性值。我將有多個fr:bar,但我會爲此使用一個條件([@ id = 1])。那麼,如何選擇fr:bar節點到變量中? – BinnyG 2010-11-24 01:38:56