使用xsd模式使用属性xmlns验证xml

时间:2014-02-17 00:44:31

标签: xml xsd

当你使用xsd架构验证我的xml时遇到问题,我认为这是xmlns属性,在我的测试中会抛出以下错误:

“属性声明的{name}必须与'xmlns'不匹配。”

我的xsd架构:

    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="MensajeProv">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Datos">
          <xs:complexType>
            <xs:sequence minOccurs="0" maxOccurs="1">
              <xs:element name="Mensaje">
                <xs:complexType>
                  <xs:sequence minOccurs="0" maxOccurs="1">
                    <xs:element name="tipoMsjID" type="xs:string" />
                    <xs:element name="proveedorID" type="xs:string" />
                    <xs:element name="usuario" type="xs:string" />
                    <xs:element name="fechaIni" type="xs:string" />
                    <xs:element name="fechaFin" type="xs:string" />
                    <xs:element name="empresaID" type="xs:int" />
                    <xs:element name="tipoID" type="xs:int" />
                    <xs:element name="tituloMsj" type="xs:string" />
                    <xs:element name="descripcionMsj" type="xs:string" />
                    <xs:element name="URL" type="xs:anyURI" />
                    <xs:element name="accionURL" type="xs:string" />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="Firmante">
          <xs:complexType>
            <xs:sequence minOccurs="0" maxOccurs="1">
              <xs:element name="Fecha" type="xs:string" />
              <xs:element name="sistemaID" type="xs:int" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="Signature" >
          <xs:complexType>
            <xs:sequence minOccurs="0" maxOccurs="1">
              <xs:element name="SignedInfo">
                <xs:complexType>
                  <xs:sequence minOccurs="0" maxOccurs="1">
                    <xs:element name="CanonicalizationMethod" />
                    <xs:element name="Reference">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="Transforms">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name ="Transform" />
                              </xs:sequence>
                            </xs:complexType>
                          </xs:element>
                          <xs:element name="DigestMethod"/>
                          <xs:element name="DigestValue" type="xs:string" />
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="SignatureValue" type="xs:string" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="Signature">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="xmlns" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="CanonicalizationMethod">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="Algorithm" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name="SignatureMethod">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="Algorithm" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="Reference">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="URI" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="Transform">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="Algorithm" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  <xs:complexType name="DigestMethod">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="Algorithm" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:schema>

提前致谢

2 个答案:

答案 0 :(得分:0)

是的,xmlns就像一个保留字,仅用于声明命名空间。

答案 1 :(得分:0)

错误在于:

<xs:complexType name="Signature">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="xmlns" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
</xs:complexType>

以字母“x”,“m”,“l”开头的任何属性都是非法的。因此,必须更改属性'xmlns'的名称。