微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xml – 如何实例化抽象类型的XSD元素

我是一名刚接触 XML和Web服务的java程序员.我正在尝试创建一个符合XSD(我没写过)的xml文档,其中包含下面的代码片段.我想要做的是调用此Web服务来复制邮件.有一个名为copy的元素,它是抽象类型“tns:copyRequest”.由于元素的类型是抽象的,Eclipse告诉我我不能创建一个.有一个copyMailingRequest类型(听起来就像我想要的那样),但我不确定如何实例化它,因为没有扩展该类型的元素.我错过了什么?
<xs:element name="copy" nillable="true" type="tns:copyRequest"/>

<xs:complexType name="copyMailingRequest">
  <xs:complexContent>
    <xs:extension base="tns:copyRequest">
      <xs:sequence>
        <xs:element name="fromId" type="tns:MailingId"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

<xs:complexType name="StandardMailingId">
  <xs:complexContent>
    <xs:extension base="tns:MailingId"/>
  </xs:complexContent>
</xs:complexType>

<xs:complexType name="MailingId">
  <xs:complexContent>
    <xs:extension base="tns:ObjectId"/>
  </xs:complexContent>
</xs:complexType>

<xs:complexType name="copyRequest" abstract="true">
  <xs:sequence>
    <xs:element name="newName" type="xs:string"/>
  </xs:sequence>
</xs:complexType>
为了更容易理解,下面是一个最小修改的模式(添加一个带有任意targetNamespace的schema元素,并为ObjectId添加一个虚拟定义):
<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" xmlns:tns="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="copy" nillable="true" type="tns:copyRequest"/>

    <xs:complexType name="copyMailingRequest">
        <xs:complexContent>
            <xs:extension base="tns:copyRequest">
                <xs:sequence>
                    <xs:element name="fromId" type="tns:MailingId"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="StandardMailingId">
        <xs:complexContent>
            <xs:extension base="tns:MailingId"/>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="MailingId">
        <xs:complexContent>
            <xs:extension base="tns:ObjectId"/>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="ObjectId"/>

    <xs:complexType name="copyRequest" abstract="true">
        <xs:sequence>
            <xs:element name="newName" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

这是XSD自动(和有效)生成的示例XML的样子:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<copy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="copyMailingRequest" xmlns="http://tempuri.org/XMLSchema.xsd">
    <newName>newName1</newName>
    <fromId/>
</copy>

这里的要点是xsi:type =“copyMailingRequest”;这是您在场景中提供具体类型的方式.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。