使用无序列的 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>
我使用 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>