2010-11-23 1 views
0

orbeon을 사용하고 있으며 XBL에 정의 된 하위 요소를 읽으려고합니다. 다음은 내 xform 정의의 모양입니다.간단한 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

답변

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

+0

OK, 알겠습니다. 나는이 문제에 대한 나의 더 나은 이해를 바탕으로 대답을 업데이트했으며 지금은 더 이해하기를 바란다. – avernet