gpt4 book ai didi

来自 XSD 错误的 XML 发现无效内容

转载 作者:数据小太阳 更新时间:2023-10-29 02:30:01 26 4
gpt4 key购买 nike

我正在尝试创建一个基于 XSD 架构定义的 XML 文件,架构定义可在以下链接中找到

Schema-http://xmlgw.companieshouse.gov.uk/v1-0/schema/forms/CompanyIncorporation-v2-6.xsd

而我的 XML 如下,

   <?xml version="1.0" encoding="UTF-8"?>
<CompanyIncorporation xmlns="http://xmlgw.companieshouse.gov.uk" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlgw.companieshouse.gov.uk http://xmlgw.companieshouse.gov.uk/v2-1/schema/forms/CompanyIncorporation-v2-6.xsd">
<CompanyType>BYSHR</CompanyType>
<CountryOfIncorporation>EW</CountryOfIncorporation>
<RegisteredOfficeAddress>
<Premise>38</Premise>
<Street>Vaughan Road</Street>
<Thoroughfare>Pentwyn</Thoroughfare>
<PostTown>Harrow</PostTown>
<Country>GB-ENG</Country>
<Postcode>HA1 4EE</Postcode>
</RegisteredOfficeAddress>
<Articles>BESPOKE</Articles>
<RestrictedArticles>false</RestrictedArticles>
<SameDay>false</SameDay>
<SameName>false</SameName>
<NameAuthorisation>false</NameAuthorisation>
</CompanyIncorporation>

但是当我验证它时会产生错误,

Not valid.
Error - Line 15, 18: org.xml.sax.SAXParseException; lineNumber: 15; columnNumber: 18;
cvc-complex-type.2.4.a: Invalid content was found starting with element 'SameDay'. One
of '{"http://xmlgw.companieshouse.gov.uk":Appointment}' is expected.

DEMO

最佳答案

您似乎缺少一些要求。

文档类型是CompanyIncorporationType这只是一个 sequence的元素。与 sequence , 必须指定其中的所有元素,除非 minOccurs设置为 0。

The schema element xsd:sequence defines that the enclosed set of elements should occur in the given order and according to the specified minimum and maximum repetition counts. (The default for both is 1.)

由于错误发生在 <SameDay> ,查看xsd中定义的所有(同级)元素,在<xs:element name="RestrictedArticles">之间和 <xs:element name="SameDay">

  • <xs:element name="Appointment" maxOccurs="unbounded"> - 必需

  • <xs:element name="StatementOfCapital" type="StatementOfCapitalType" minOccurs="0"/> - 不需要

  • <xs:element name="Subscribers" type="SubscriberPersonType" minOccurs="0" maxOccurs="unbounded"> - 不需要

  • <xs:element name="Guarantors" type="GuarantorType" minOccurs="0" maxOccurs="unbounded"> - 不需要

  • <xs:element name="Authoriser"> - 必需

所以...

您缺少两个元素 <Appointment><Authorizer>之前<SameDay>

也就是说,使用 IDE(或某些 xml 工具)创建 xml shema 实现通常会有所帮助。例如,使用 Eclipse,它将创建最基本的最小框架以针对 xsd 进行验证。

这是(由 Eclipse 创建的)文件,其中包含要验证的 xml 的最低限度

<?xml version="1.0" encoding="UTF-8"?>
<CompanyIncorporation ... >
<CompanyType>PLC</CompanyType>
<CountryOfIncorporation>EW</CountryOfIncorporation>
<RegisteredOfficeAddress>RegisteredOfficeAddress</RegisteredOfficeAddress>
<Appointment>
<Authentication>Authentication</Authentication>
<Authentication>Authentication</Authentication>
<Authentication>Authentication</Authentication>
<Director />
</Appointment>
<Authoriser>
<Agent>
<Person>Person</Person>
<Authentication />
<Authentication />
<Authentication />
<Address>Address</Address>
</Agent>
</Authoriser>
<SameDay>true</SameDay>
</CompanyIncorporation>

更新

解释您在 <Appointment> 中看到的元素和 <Authoriser> :

<Appointment>

<xs:element name="Appointment" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Proposed officers</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Authentication" type="PersonalAttributeType" minOccurs="3" maxOccurs="3"/>
<xs:choice>
<xs:element name="Director">
<xs:complexType>
<xs:complexContent>
<xs:extension base="DirectorAppointmentType"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="Secretary" type="SecretaryAppointmentType"/>
<xs:element name="Member" type="MemberAppointmentType"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>

你可以看到 <Appointment>有一个 sequence - <Authentication>恰好三倍,一个choice , 在 <Director> 之间, <Secretary> , 或 <Member> .您将不得不对 xsd 进行排序以实际查看这些元素类型的要求

<Authoriser>

<xs:element name="Authoriser">
<xs:complexType>
<xs:choice>
<xs:element name="Agent" type="AgentType">
</xs:element>
<xs:element name="Solicitor" type="AuthoriserType">
</xs:element>
<xs:element name="Member" type="AuthoriserType">
</xs:element>
<xs:element name="Subscribers">
<xs:complexType>
<xs:sequence>
<xs:element name="Subscriber" type="AuthoriserType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>

可以看到<Authoriser>需要单一选择 <Agent> , <Member> , <Solicitor> , 或 <Subscriber> .您将不得不对 xsd 进行排序以实际查看这些元素类型的要求

关于来自 XSD 错误的 XML 发现无效内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25805796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com