除非我添加elementFormDefault =" qualified"否则无法验证到XSD

时间:2016-05-16 22:16:42

标签: xml xsd wsdl xsd-validation xml-validation

我无法通过外部WSDL服务提供的架构验证XML。 验证会抛出此错误:

使用验证码在线#1:

  

元素' SolicitudEncuesta'在命名空间   ' HT PS://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd'无效   儿童元素' CabeceraSolicitud'在命名空间   ' HT PS://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd' ;.清单   可能的元素:' CabeceraSolicitud'。行:1列:204

使用验证码在线#2

  

XML文档中的错误:1:203 cvc-elt.1:找不到   元素宣言' SolicitudEncuesta'。

     

文件xml-schema中的错误:2:196 TargetNamespace.2:期望否   命名空间,但架构文档的目标命名空间为   ' https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd'

如果我将 elementFormDefault ="限定" 添加到架构,则验证 。 但是,架构无法编辑,因为它是为外部服务提供的。

架构:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsd:schema xmlns:xsd="ht*p://www.w3.org/2001/XMLSchema" 
xmlns="ht*ps://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd" 
targetNamespace="ht*ps://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd">
        <xsd:element name="SolicitudEncuesta" type="SolicitudEncuesta"/>
        <xsd:complexType name="SolicitudEncuesta">
            <xsd:sequence>
                <xsd:element name="CabeceraSolicitud" type="CabeceraSolicitud" nillable="true"/>
                <xsd:element name="Encuesta" type="xsd:base64Binary" nillable="true"/>
            </xsd:sequence>
        </xsd:complexType>
        <xsd:complexType name="CabeceraSolicitud">
            <xsd:sequence>
                <xsd:element name="NumeroOrden" nillable="true">
                    <xsd:simpleType>
                        <xsd:restriction base="xsd:string">
                            <xsd:length value="11"/>
                        </xsd:restriction>
                    </xsd:simpleType>
                </xsd:element>
                <xsd:element name="CodigoControl" nillable="true">
                    <xsd:simpleType>
                        <xsd:restriction base="xsd:string">
                            <xsd:length value="5"/>
                        </xsd:restriction>
                    </xsd:simpleType>
                </xsd:element>
                <xsd:element name="CorreoElectronico" nillable="true">
                    <xsd:simpleType>
                        <xsd:restriction base="xsd:string">
                            <xsd:maxLength value="60"/>
                        </xsd:restriction>
                    </xsd:simpleType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:schema>

我的XML:

    <SolicitudEncuesta xmlns:xsd="ht*p://www.w3.org/2001/XMLSchema"
xmlns="ht*ps://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd" 
targetNamespace="https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd">
      <CabeceraSolicitud>
        <NumeroOrden>str12340000</NumeroOrden>
        <CodigoControl>str12</CodigoControl>
        <CorreoElectronico>str1234</CorreoElectronico>
     </CabeceraSolicitud>
      <Encuesta>1234</Encuesta>
    </SolicitudEncuesta>

我认为这是一个名称空间问题。我在其他帖子中读到了类似的问题,但我无法找到解决方案。

更新

最后,使用@ kjhughes的知识,我可以正确验证Schema。并且添加SOAP Envelope我能够正确使用Web服务。

最终XML

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sol="https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd">
   <soapenv:Header/>
   <soapenv:Body>
      <sol:SolicitudEncuesta>
         <CabeceraSolicitud>
            <NumeroOrden>XXXX</NumeroOrden>
            <CodigoControl>XXXXX</CodigoControl>
            <CorreoElectronico>test@gmail.com</CorreoElectronico>
         </CabeceraSolicitud>
         <Encuesta>XXXXX</Encuesta>
      </sol:SolicitudEncuesta>
   </soapenv:Body>
</soapenv:Envelope>

谢谢!

1 个答案:

答案 0 :(得分:0)

假设你的XSD有&#34;故意&#34; (?)错误已更正,并且可以从https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd检索错误,则以下更正的XML将对其有效:

<?xml version="1.0" encoding="UTF-8"?>
<se:SolicitudEncuesta 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd 
                        https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd"
    xmlns:se="https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd" >
  <CabeceraSolicitud>
    <NumeroOrden>str12340000</NumeroOrden>
    <CodigoControl>str12</CodigoControl>
    <CorreoElectronico>str1234</CorreoElectronico>
  </CabeceraSolicitud>
  <Encuesta>1234</Encuesta>
</se:SolicitudEncuesta>