[英]How to transform unordered elements in xml to match an xsd:sequence order?
[英]How to reduce repetive occurrence of a sequence of elements in XML, without changing .xsd file
我是XML的新手。 我使用XML来配置程序。 以下是用于控制一个实例的实例化的元素的XSD定义。
<xs:complexType name="type-A">
<xs:complexContent>
<xs:extension base="base-type">
<xs:sequence>
<xs:element name="name-a" type="xs:token" />
<xs:element name="name-b" type="xs:token" />
<xs:element name="name-c" type="xs:positiveInteger" />
<xs:element name="name-d" type="xs:boolean" />
<xs:element name="name-e" type="xs:positiveInteger" />
<xs:element name="name-f" type="xs:positiveInteger" />
<xs:element name="name-g" type="xs:positiveInteger" />
<xs:element name="name-h" type="xs:positiveInteger" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
在配置XML文件中,如下所示。 在这里,我需要配置3个实例。 实际上,我需要实例化更多。 请注意,实例之间只有名称b和名称c有所不同。
问题:有什么办法可以消除这种重复性?
<type-Xs>
<instance-1 xsi:type="type-X">
<name-a>eth0</name-a>
<name-b>10.0.0.1</name-b>
<name-c>10001</name-c>
<name-d>true</name-d>
<name-e>2048</name-e>
<name-f>32</name-f>
<name-g>64</name-g>
</instance-1>
<instance-2 xsi:type="type-X">
<name-a>eth0</name-a>
<name-b>10.0.0.2</name-b>
<name-c>11001</name-c>
<name-d>true</name-d>
<name-e>2048</name-e>
<name-f>32</name-f>
<name-g>64</name-g>
</instance-2>
<instance-3 xsi:type="type-X">
<name-a>eth0</ethname>
<name-b>10.0.0.3</name-b>
<name-c>12001</name-c>
<name-d>true</name-d>
<name-e>2048</name-e>
<name-f>32</name-f>
<name-g>64</name-g>
</instance-3>
</type-Xs>
您可以更改文档格式,以允许为各种名称指定默认值。 生成的文档可能如下所示。
<type-Xs>
<!-- These shall be interpreted as defaults for all instances. -->
<name-a>eth0</name-a>
<name-d>true</name-d>
<name-e>2048</name-e>
<name-f>32</name-f>
<name-g>64</name-g>
<!-- End of default values. -->
<instance-1 xsi:type="type-X">
<name-b>10.0.0.1</name-b>
<name-c>10001</name-c>
</instance-1>
<instance-2 xsi:type="type-X">
<name-b>10.0.0.2</name-b>
<name-c>11001</name-c>
</instance-2>
<instance-3 xsi:type="type-X">
<name-b>10.0.0.3</name-b>
<name-c>12001</name-c>
</instance-3>
</type-Xs>
这种方法很好地适用于您突然发现实例确实需要更改name-b
和name-c
之外的其他字段的情况。 同样,如果有用,您还可以为name-b
和name-c
提供默认值。
当然,这不会神奇地更改任何处理此类文档的应用程序以了解新的语义。 您或者需要去更改那些应用程序,或者提供一个小的XSLT样式表,它将新文档转换回旧的旧格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.