簡體   English   中英

如何在不更改.xsd文件的情況下減少XML中元素序列的重復出現

[英]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-bname-c之外的其他字段的情況。 同樣,如果有用,您還可以為name-bname-c提供默認值。

當然,這不會神奇地更改任何處理此類文檔的應用程序以了解新的語義。 您或者需要去更改那些應用程序,或者提供一個小的XSLT樣式表,它將新文檔轉換回舊的舊格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM