我正在为我的Java代码创建一个XSD生成器,以便在被调用时运行。它只在需要的时候生成XSD。它使用sax解析器并生成以下XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.google.com/types/evt/SendCCToAlternateAddr/v1" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:NS1="SendCCToAlternateAddrEvtType">
<xsd:element name="SendCCToAlternateAddrEvtType">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="CommonAttributes" minOccurs="0" maxOccurs="999">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="EventName" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="EventVer" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="BusTransEffDt" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="BusTransRecTS" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="PubSystemNm" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="EventType" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="EventSubType" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="OrgUnitNm" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="Channel" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="PmtCardBasic" minOccurs="0" maxOccurs="999">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="PartyPDId" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="PartyIdTypeCd" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="ArrangementId" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="MajBusUnitCd" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="PrdSvcLinBusCd" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="PaymentCardDetail" minOccurs="0" maxOccurs="999">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="MaskedCardNr" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="CardTypeDc" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="AlternateAddressInd" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="CreatedByPartyPDId" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="CreatedByPartyIdTypeCd" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="PaymentCardEncryptedNr" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="PaymentCardDetail" minOccurs="0" maxOccurs="999">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="MaskedCardNr" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="CardTypeDc" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="AlternateAddressInd" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="CreatedByPartyPDId" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
<xsd:element name="CreatedByPartyIdTypeCd" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ServiceTypeDc" minOccurs="0" maxOccurs="999" type="xsd:normalizedString"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>XML如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<NS1:SendCCToAlternateAddrEvtType xmlns:NS1="http://www.google.com/types/evt/SendCCToAlternateAddr/v1">
<CommonAttributes>
<EventName>sendCCToAlternateAddr</EventName>
<EventVer>1.0</EventVer>
<BusTransEffDt>2015-10-24</BusTransEffDt>
<BusTransRecTS>2015-10-24T13:12:02.276-06:00</BusTransRecTS>
<PubSystemNm>UpdateServices</PubSystemNm>
<EventType>*</EventType>
<EventSubType>*</EventSubType>
<OrgUnitNm>yioyiu7y</OrgUnitNm>
<Channel>employee</Channel>
</CommonAttributes>
<PmtCardBasic>
<PartyPDId>34221717</PartyPDId>
<PartyIdTypeCd>*</PartyIdTypeCd>
<ArrangementId>XXXX-XXXX-XXXX-</ArrangementId>
<MajBusUnitCd>BNK</MajBusUnitCd>
<PrdSvcLinBusCd>DMD</PrdSvcLinBusCd>
<PaymentCardDetail>
<MaskedCardNr>XXXX-XXXX-XXXX-</MaskedCardNr>
<CardTypeDc>MasterCard</CardTypeDc>
<AlternateAddressInd>Y</AlternateAddressInd>
<CreatedByPartyPDId>2341223</CreatedByPartyPDId>
<CreatedByPartyIdTypeCd>EMPE</CreatedByPartyIdTypeCd>
<PaymentCardEncryptedNr>999493076694449</PaymentCardEncryptedNr>
<PaymentCardDetail>
<MaskedCardNr>XXXX-XXXX-XXXX-</MaskedCardNr>
<CardTypeDc>MasterCard</CardTypeDc>
<AlternateAddressInd>Y</AlternateAddressInd>
<CreatedByPartyPDId>2341223</CreatedByPartyPDId>
<CreatedByPartyIdTypeCd>EMPE</CreatedByPartyIdTypeCd>
</PaymentCardDetail>
</PaymentCardDetail>
</PmtCardBasic>
<ServiceTypeDc>sendCCToAlternateAddr</ServiceTypeDc>
</NS1:SendCCToAlternateAddrEvtType>我看过在线生成器来验证我的XSD,但是我的XSD似乎比其他第三方生成的XSD在JAVA验证方面走得更远。
我收到以下错误:
ERROR : cvc-complex-type.2.4.a: Invalid content was found starting with element 'CommonAttributes'. One of '{"http://www.google.com/types/evt/SendCCToAlternateAddr/v1":CommonAttributes, "http://www.google.com/types/evt/SendCCToAlternateAddr/v1":PmtCardBasic, "http://www.google.com/types/evt/SendCCToAlternateAddr/v1":ServiceTypeDc}' is expected.任何关于如何使这个XSD有效的帮助都将是一个很大的帮助。
发布于 2015-11-16 23:32:34
您没有正确使用您的命名空间。我建议您查看以下示例,并以类似的方式实现您的示例。我试着到处验证我的,它就像魅力一样有效。
XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
attributeFormDefault="qualified"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/XMLSchema http://myNamespaceUrl/taxonomie/1"
targetNamespace="http://myNamespaceUrl/taxonomie/1"
xmlns="http://myNamespaceUrl/taxonomie/1">
<xs:element name="taxonomie">
...
</xs:element>
</xs:schema>XML:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<taxonomie xmlns="http://bva.sozvers.at/lava/taxonomie/1">
<taxon>
...
</taxon>
</taxonomie>发布于 2015-11-16 23:36:21
您应该定义您的名称空间并适当地修饰您的XML元素,从上面的内容来判断,您已经定义了一个名称空间,但它并不是XSD要查找的名称空间。以下内容应该适用于您:
<?xml version="1.0" encoding="UTF-8"?>
<NS1:SendCCToAlternateAddrEvtType xmlns:NS1="http://www.usaa.com/types/evt/SendCCToAlternateAddr/v1">
<NS1:CommonAttributes>
<NS1:EventName>sendCCToAlternateAddr</NS1:EventName>
<NS1:EventVer>1.0</NS1:EventVer>
<NS1:BusTransEffDt>2015-10-24</NS1:BusTransEffDt>
<NS1:BusTransRecTS>2015-10-24T13:12:02.276-06:00</NS1:BusTransRecTS>
<NS1:PubSystemNm>UpdateServices</NS1:PubSystemNm>
<NS1:EventType>*</NS1:EventType>
<NS1:EventSubType>*</NS1:EventSubType>
<NS1:OrgUnitNm>yioyiu7y</NS1:OrgUnitNm>
<NS1:Channel>employee</NS1:Channel>
</NS1:CommonAttributes>
<NS1:PmtCardBasic>
<NS1:PartyPDId>34221717</NS1:PartyPDId>
<NS1:PartyIdTypeCd>*</NS1:PartyIdTypeCd>
<NS1:ArrangementId>XXXX-XXXX-XXXX-</NS1:ArrangementId>
<NS1:MajBusUnitCd>BNK</NS1:MajBusUnitCd>
<NS1:PrdSvcLinBusCd>DMD</NS1:PrdSvcLinBusCd>
<NS1:PaymentCardDetail>
<NS1:MaskedCardNr>XXXX-XXXX-XXXX-</NS1:MaskedCardNr>
<NS1:CardTypeDc>MasterCard</NS1:CardTypeDc>
<NS1:AlternateAddressInd>Y</NS1:AlternateAddressInd>
<NS1:CreatedByPartyPDId>2341223</NS1:CreatedByPartyPDId>
<NS1:CreatedByPartyIdTypeCd>EMPE</NS1:CreatedByPartyIdTypeCd>
<NS1:PaymentCardEncryptedNr>999493076694449</NS1:PaymentCardEncryptedNr>
<NS1:PaymentCardDetail>
<NS1:MaskedCardNr>XXXX-XXXX-XXXX-</NS1:MaskedCardNr>
<NS1:CardTypeDc>MasterCard</NS1:CardTypeDc>
<NS1:AlternateAddressInd>Y</NS1:AlternateAddressInd>
<NS1:CreatedByPartyPDId>2341223</NS1:CreatedByPartyPDId>
<NS1:CreatedByPartyIdTypeCd>EMPE</NS1:CreatedByPartyIdTypeCd>
</NS1:PaymentCardDetail>
</NS1:PaymentCardDetail>
</NS1:PmtCardBasic>
<NS1:ServiceTypeDc>sendCCToAlternateAddr</NS1:ServiceTypeDc>
</NS1:SendCCToAlternateAddrEvtType>注意更改:将http://www.google.com/types/evt/SendCCToAlternateAddr/v1更改为http://www.usaa.com/types/evt/SendCCToAlternateAddr/v1。我还装饰了每一个元素。您可以避免这样做,但我发现更好的做法是显式地声明每个元素使用的名称空间,因为可以在单个XML中使用多个元素,而且大多数XML都是由代码生成的,因此实际上不会占用任何额外的时间。
我还注意到一件事,您在上面提供的XSD中包含http://www.google.com/types/evt/SendCCToAlternateAddr/v1名称空间,但是,您报告的错误表明它正在查找http://www.usaa.com/types/evt/SendCCToAlternateAddr/v1,而您在某个地方与预期的名称空间不匹配。在更改代码中的名称空间之前,您应该首先了解这一点。
https://stackoverflow.com/questions/33738365
复制相似问题