首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我的XSD生成器中的这个XSD有什么问题?

我的XSD生成器中的这个XSD有什么问题?
EN

Stack Overflow用户
提问于 2015-11-16 23:01:01
回答 2查看 127关注 0票数 0

我正在为我的Java代码创建一个XSD生成器,以便在被调用时运行。它只在需要的时候生成XSD。它使用sax解析器并生成以下XSD:

代码语言:javascript
复制
<?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如下所示:

代码语言:javascript
复制
<?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验证方面走得更远。

我收到以下错误:

代码语言:javascript
复制
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有效的帮助都将是一个很大的帮助。

EN

回答 2

Stack Overflow用户

发布于 2015-11-16 23:32:34

您没有正确使用您的命名空间。我建议您查看以下示例,并以类似的方式实现您的示例。我试着到处验证我的,它就像魅力一样有效。

XSD:

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<taxonomie xmlns="http://bva.sozvers.at/lava/taxonomie/1">
    <taxon>
    ...
    </taxon>
</taxonomie>
票数 0
EN

Stack Overflow用户

发布于 2015-11-16 23:36:21

您应该定义您的名称空间并适当地修饰您的XML元素,从上面的内容来判断,您已经定义了一个名称空间,但它并不是XSD要查找的名称空间。以下内容应该适用于您:

代码语言:javascript
复制
<?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,而您在某个地方与预期的名称空间不匹配。在更改代码中的名称空间之前,您应该首先了解这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33738365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档