【问题标题】:Whats a good practice to new implementation in same XML?在同一个 XML 中实现新实现有什么好的做法?
【发布时间】:2019-07-15 17:52:10
【问题描述】:

我有一个想要实现新功能的网络服务。我想知道将它们添加到默认 XML 是否是一种好习惯,或者我应该为此使用创建新方法?

一个例子:我有一个方法可以返回产品的特征、颜色、价格、尺寸等。我想实现一个新功能,该功能也将返回多个网站上的价格。实际 XML:

<Product>
    <Name> IPhone X </Name>
    <Color> Black </Color>
    <Type> Smartphone </Type>
</Product>

新的 XML:

<Product>
    <Name> IPhone X </Name>
    <Color> Black </Color>
    <PriceInSites>
        <Site> www.apple.com </Site>
        <Price> 1000.00 </Price>
    <PriceInSites>
    <Type> Smartphone </Type>
</Product>

而多个客户端已经在使用没有此 XML 块的实现 - 我应该在单独的方法中提供它吗?

在同一个 XML 中新实现有什么好的做法?

【问题讨论】:

    标签: c# web-services web asp.net-web-api soap


    【解决方案1】:

    首先,在您的新 XML 中,您的 PriceInSites 结束标记应类似于 &lt;/PriceInSites&gt; 而不是 &lt;PriceInSites&gt;。其次,答案取决于您的客户愿意做多少工作来使用新的 XML。我没有看到您的 XML 架构文档,因此假设您的原始架构看起来像这样:

    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element name="Type">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value=" Smartphone "/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="Product">
            <xs:complexType>
                <xs:sequence>
                    <xs:element ref="Name"/>
                    <xs:element ref="Color"/>
                    <xs:element ref="Type"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:element name="Name">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value=" IPhone X "/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="Color">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value=" Black "/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
    </xs:schema>
    

    那么你的新 XML 模式应该使新插入的标签成为可选的:

    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element name="Type">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value=" Smartphone "/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="Site">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value=" www.apple.com "/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="Product">
            <xs:complexType>
                <xs:sequence>
                    <xs:element ref="Name"/>
                    <xs:element ref="Color"/>
                    <xs:element ref="PriceInSites" minOccurs="0"/>
                    <xs:element ref="Type"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:element name="PriceInSites">
            <xs:complexType>
                <xs:sequence>
                    <xs:element ref="Site"/>
                    <xs:element ref="Price"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
        <xs:element name="Price">
            <xs:simpleType>
                <xs:restriction base="xs:decimal">
                    <xs:enumeration value="1000.0"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="Name">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value=" IPhone X "/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="Color">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value=" Black "/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
    </xs:schema>
    

    ...通过将 minOccurs 设置为零。仅当您希望继续支持不愿意或无法更新其 XML 定义以处理您的新元素的现有 XML 模式使用者时,您才应该这样做。

    【讨论】:

    • 谢谢你,Xansta!
    猜你喜欢
    • 2021-08-21
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多