2014-09-29 60 views
2

我已经创造了一些XSD模式和接收试图从一个在C#阅读时,下面的错误:XML元素具有无效子元素“X”,预计“X”

元素PartnerPSTNTransfer在命名空间'http://localhost/Orders-PartnerPSTNTransfer-v1-0'有命名空间'http://localhost/Orders-Connection-v1-0'中的无效子元素'StartDate'
期望的可能元素列表:名称空间中的'StartDate''http://localhost/Orders-PartnerPSTNTransfer-v1-0'

但是,期望的元素是StartDate,它存在于xml文件中,所以我不确定为什么会显示此错误。我会为attatch我创建的模式的的.xsd:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema id="PartnerPSTN" 
    targetNamespace="http://localhost/Orders-PartnerPSTN-v1.0" 
    elementFormDefault="qualified" 
    xmlns="http://localhost/Orders-PartnerPSTN-v1.0" 
    xmlns:mstns="http://localhost/Orders-PartnerPSTN-v1.0" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:a="http://localhost/Orders-Address-v1-0" 
    xmlns:c="http://localhost/Orders-Common-v1-0" > 

    <xs:simpleType name="Contract"> 
    <xs:restriction base="xs:token"> 
     <xs:enumeration value="Monthly_12"></xs:enumeration> 
    </xs:restriction> 
    </xs:simpleType> 

    <xs:simpleType name="PackageOption"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="Data Only" /> 
     <xs:enumeration value="Free Evening and Weekend" /> 
     <xs:enumeration value="1000 Anytime" /> 
    </xs:restriction> 
    </xs:simpleType> 

    <xs:simpleType name="FeatureOption"> 
    <xs:list> 
     <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="Feature0"/> 
      <xs:enumeration value="Feature0.A"/> 
      <xs:enumeration value="Feature0.B"/> 
      <xs:enumeration value="Feature0.C"/> 
      <xs:enumeration value="Feature1"/> 
      <xs:enumeration value="Feature2"/> 
      <xs:enumeration value="Feature2.A"/> 
      <xs:enumeration value="Feature3"/> 
      <xs:enumeration value="Feature3.A"/> 
      <xs:enumeration value="Feature3.B"/> 
      <xs:enumeration value="Feature3.C"/> 
     </xs:restriction> 
     </xs:simpleType> 
    </xs:list> 
    </xs:simpleType> 

    <xs:complexType name="PartnerPSTNConfiguration"> 
    <xs:sequence> 
     <xs:element name="Package" type="PackageOption" /> 
     <xs:element name="Feature" type="FeatureOption" /> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

模式2:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema id="PartnerPSTNTransfer" 
    targetNamespace="http://localhost/Orders-PartnerPSTNTransfer-v1-0" 
    elementFormDefault="qualified" 
    xmlns="http://localhost/Orders-PartnerPSTNTransfer-v1-0" 
    xmlns:mstns="http://localhost/Orders-PartnerPSTNTransfer-v1-0" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:a="http://localhost/Orders-Address-v1-0" 
    xmlns:padsl="http://localhost/Orders-PartnerPSTN-v1.0" 
    xmlns:c="http://localhost/Orders-Common-v1-0" 
    xmlns:conn="http://localhost/Orders-Connection-v1-0"> 

    <xs:import namespace="http://localhost/Orders-Common-v1-0" schemaLocation="../../Common.xsd" /> 
    <xs:import namespace="http://localhost/Orders-PartnerPSTN-v1.0" schemaLocation="PartnerPSTN.xsd" /> 

    <xs:complexType name="PartnerPSTNTransfer"> 
    <xs:sequence> 
     <xs:element name="TelephoneNumber" type="c:Landline" /> 
     <xs:element name="StartDate" type="xs:date" /> 
     <xs:element name="Postcode" type="c:RequiredString" /> 
     <xs:element name="Configuration" type="padsl:PartnerPSTNConfiguration" /> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:element name="PartnerPSTNTransfer" type="PartnerPSTNTransfer"></xs:element> 
</xs:schema> 

编辑

这里是我的XML我想验证:

<p:PartnerPSTNTransfer xmlns:padsl="http://localhost/Orders-PartnerPSTN-v1.0" 
xmlns:p="http://localhost/Orders-PartnerPSTNTransfer-v1-0" 
xmlns:a="http://localhost/Orders-Address-v1-0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:c="http://localhost/Orders-Connection-v1-0"> 
    <p:TelephoneNumber>01111111111</p:TelephoneNumber> 
    <c:StartDate>2014-10-10T00:00:00</c:StartDate> 
    <c:Postcode>XX1 1XX</c:Postcode> 
    <p:Configuration> 
    <padsl:Contract>MA</padsl:Contract> 
    <padsl:PackageOption>Weekend</padsl:PackageOption> 
    <padsl:Featureoption>Feature0 Feature2.A</padsl:Featureoption> 
    </p:Configuration> 
</p:PartnerPSTNTransfer> 

编辑2

到目前为止的XML。我beleive我已经删除了原来的问题,虽然现在说:

The element 'Configuration' in namespace 'http://localhost/Orders-PartnerPSTNTransfer-v1-0' has invalid child element 'Contract' in namespace 'http://localhost/Orders-PartnerPSTN-v1.0'. 

和XML之中:

<p:PartnerPSTNTransfer xmlns:padsl="http://localhost/Orders-PartnerPSTN-v1.0" 
xmlns:p="http://localhost/Orders-PartnerPSTNTransfer-v1-0" 
xmlns:a="http://localhost/Orders-Address-v1-0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:c="http://localhost/Orders-Connection-v1-0"> 
    <p:TelephoneNumber>01111111111</p:TelephoneNumber> 
    <p:StartDate>2014-10-10</p:StartDate> 
    <p:Postcode>EX20 1LP</p:Postcode> 
    <p:Configuration> 
    <padsl:Package>Free Evening and Weekend</padsl:Package> 
    <padsl:Feature>Feature0 Feature2.A</padsl:Feature> 
    <padsl:Contract>Monthly_12</padsl:Contract> 
    </p:Configuration> 
</p:PartnerPSTNTransfer> 
+1

什么是您试图验证的实际XML实例? – 2014-09-29 10:03:06

+0

@TomRedfern我添加了我想验证的XML – user667430 2014-09-29 10:06:16

+0

Schema 2在命名空间'http:// localhost/Orders-PartnerPSTNTransfer-v1-0'中定义了StartDate,XML在命名空间'http:// localhost'中提供了StartDate /订单-连接-v1-0'。 – GSerg 2014-09-29 10:17:10

回答

4

XML实例表示,他们会寻找所谓的起始日期的元件,其在某处定义

<c:StartDate>2014-10-10T00:00:00</c:StartDate> 

其中:

命名空间 http://localhost/Orders-Connection-v1-0模式下

你的模式,但是,这种元素定义的命名空间http://localhost/Orders-PartnerPSTNTransfer-v1-0

所以你需要让起始日期引用它包含类型正确的命名空间下定义的修改实例下属于一个名为PartnerPSTNTransfer类型。你已经提到,在“P”的命名空间前缀下根级别的命名空间,所以你应该能够做到:

<p:StartDate>2014-10-10T00:00:00</p:StartDate> 

(与同为邮编元素)。

编辑

在回答你问题的第二部分,XML实例解析为命名空间http://localhost/Orders-PartnerPSTN-v1.0

但是在架构PartnerPSTNConfiguration定义并在类型PartnerPSTNConfiguration定义的元素称为合同不包含合同的定义,仅适用于包装和特征:

<xs:complexType name="PartnerPSTNConfiguration"> 
    <xs:sequence> 
    <xs:element name="Package" type="PackageOption" /> 
    <xs:element name="Feature" type="FeatureOption" /> 
    </xs:sequence> 
</xs:complexType> 

因此,要有效,您必须或者

<xs:complexType name="PartnerPSTNConfiguration"> 
    <xs:sequence> 
    ... 
    <xs:element name="Contract" type="SomeType" /> 
    </xs:sequence> 
</xs:complexType> 

,改变你的实例不能指望它在那里:○合同元素在PartnerPSTNConfiguration类型定义模型,例如。

+0

啊,我明白了,对不起我对XML不太好。我刚刚更新了我的帖子,发现类似的错误是我在更改这两个文件后得到的。和新的XML。问题出在:'' – user667430 2014-09-29 10:29:17

相关问题