【问题标题】:validate xml with xsd schema with attribute xmlns使用带有属性 xmlns 的 xsd 模式验证 xml
【发布时间】:2014-03-16 03:33:13
【问题描述】:

当您使用 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>

提前致谢

【问题讨论】:

  • 一个猜测,但是你的 complexType Signature 有一个名为 xmlns 的属性,重命名它。

标签: xml xsd


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    错误在这里:

    <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”的名称。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    相关资源
    最近更新 更多