使用无序列的 XSLT 重复节点类型

Repeat node type using XSLT without sequence

我使用 Relax NG 来控制 XML 模板。我想让两个节点可重复并在 XML 模板中交换它们。使我的 XML 文件符合这个:

    <root>
        <node>
            <variableValueElement>first node type</variableValueElement>
            <fixedValueElement>Value1</fixedValueElement> 
        </node>
        <node>
            <variableValueElement>first node type</variableValueElement>
            <fixedValueElement>Value1</fixedValueElement> 
        </node>
        <node>
            <variableValueElement>second node type</variableValueElement>
            <fixedValueElement>Value2</fixedValueElement> 
        </node>
        <node>
            <variableValueElement>first node type</variableValueElement>
            <fixedValueElement>Value1</fixedValueElement> 
        </node>
    </root>

为此,我准备了以下 RNG 文件:

<rng:start>
        <rng:element name="root">
                <rng:oneOrMore>
                    <rng:element name="node">
                        <rng:element name="variableValueElement">
                            <rng:data type="string"/>
                        </rng:element>
                        <rng:element name="fixedValueElement">
                            <rng:value type="string">Value1</rng:value>
                        </rng:element>
                    </rng:element>
                </rng:oneOrMore>
                <rng:oneOrMore>
                    <rng:element name="node">
                        <rng:element name="variableValueElement">
                            <rng:data type="string"/>
                        </rng:element>
                        <rng:element name="fixedValueElement">
                            <rng:value type="string">Value2</rng:value>
                        </rng:element>
                    </rng:element>
                </rng:oneOrMore>
        </rng:element>
    </rng:start>

如果我在 fixedValueElement = Value2 的节点之后添加 fidexValueElement = Value1 的节点,我会收到错误消息。我们可以在RNG中代表这种情况吗?谢谢!

您的实例对架构有效

<grammar xmlns="http://relaxng.org/ns/structure/1.0"
    xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0"
    datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
    <start>
        <element name="root">
            <oneOrMore>
                <oneOrMore>
                    <element name="node">
                        <element name="variableValueElement">
                            <data type="string"/>
                        </element>
                        <element name="fixedValueElement">
                            <value type="string">Value1</value>
                        </element>
                    </element>
                </oneOrMore>
                <zeroOrMore>
                    <element name="node">
                        <element name="variableValueElement">
                            <data type="string"/>
                        </element>
                        <element name="fixedValueElement">
                            <value type="string">Value2</value>
                        </element>
                    </element>
                </zeroOrMore>
            </oneOrMore>
        </element>
    </start>
</grammar>

我不确定,但是,您想允许

的零存在
<node>
    <variableValueElement>second node type</variableValueElement>
    <fixedValueElement>Value2</fixedValueElement> 
</node>