我正在为我的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: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
复制相似问题