首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不更改.xsd文件的情况下减少XML中元素序列的重复出现

如何在不更改.xsd文件的情况下减少XML中元素序列的重复出现
EN

Stack Overflow用户
提问于 2014-12-11 02:02:55
回答 1查看 38关注 0票数 0

我对XML很陌生。我使用XML配置我的程序。下面是用于控制一个实例实例化的元素的XSD定义。

代码语言:javascript
复制
<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个实例。在实际中,我需要实例化更多。注意,在实例之间只有name-bname-c是不同的。

问题:我能做些什么来消除这种重复吗?

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2014-12-11 03:21:33

您可以更改文档格式以允许为各种名称指定默认值。生成的文档可能如下所示。

代码语言:javascript
复制
<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样式表,将新文档转换回臃肿的旧格式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27414185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档