如何在xforms中实现case/switch

How to implement case/switch in xforms

我有 xsd 和选择语句

<xs:complexType name="opt_type">
    <xs:choice>
        <xs:element name="opt_1_1" minOccurs="0">
            <xs:simpleType>
                <xs:restriction base="xsd:string">
                    <xs:enumeration value="opt_1_1 value 1"/>
                    <xs:enumeration value="opt_1_1 value 2"/>
                    <xs:enumeration value="opt_1_1 value 3"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="opt_1_2" minOccurs="0">
            <xs:simpleType>
                <xs:restriction base="xsd:string">
                    <xs:enumeration value="opt_1_2 value"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="opt_1_3" minOccurs="0">   
            <xs:simpleType>
                <xs:restriction base="xsd:string">
                    <xs:enumeration value="opt_1_3 value"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
    </xs:choice>
</xs:complexType>

...

<xs:element name="opt" maxOccurs="unbounded">
    <xs:complexType>
        <xs:sequence>
            ...
            <xs:element name="opt_1" type="myns:opt_type" minOccurs="0"></xs:element>
            ...
        </xs:sequence>
    </xs:complexType>
</xs:element>

我需要 xforms(我正在与 Orbeon 合作),根据用户的选择,它会给我 xml 和这样的节点:

<myns:opt_1>
    <myns:opt_1_1>opt_1_1 value 1</myns:opt_1_1> 
</myns:opt_1>

<myns:opt_1>
    <myns:opt_1_1>opt_1_1 value 2</myns:opt_1_1> 
</myns:opt_1>

<myns:opt_1>
    <myns:opt_1_1>opt_1_1 value 3</myns:opt_1_1> 
</myns:opt_1>

<myns:opt_1>
    <myns:opt_1_2>opt_1_2 value</myns:opt_1_1> 
</myns:opt_1>

<myns:opt_1>
    <myns:opt_1_3>opt_1_3 value</myns:opt_1_1> 
</myns:opt_1>

我怎样才能做到这一点? xforms应该如何构建?

简而言之,您想更改 XML 的 结构 (使用不同的元素名称)。为此,您的工具应该是使用 xf:insertxf:delete 来插入和删除元素的操作。您需要执行此操作 "by hand",因为 XForms 引擎不会根据模式自动为您执行此操作。