xml 和 xsd 的架构验证失败

Posted

技术标签:

【中文标题】xml 和 xsd 的架构验证失败【英文标题】:Schema validation fails for xml and xsd 【发布时间】:2021-03-09 02:31:30 【问题描述】:

这是我的xsd

<xs:schema id="RCDNetworkAdapterData" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="RCDNetworkAdapterData">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="AdapterName" minOccurs="1" nillable="false" maxOccurs="3">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:minLength value="1"/>
                    <xs:maxLength value="3"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>       
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

这是映射到它的 xml:

<RCDNetworkAdapterData>
  <AdapterName>Ethernet</AdapterName>
  <AdapterName>WI-FI</AdapterName>
</RCDNetworkAdapterData> 

请帮忙修改xsd以映射到xml结构

【问题讨论】:

为什么不告诉读者错误信息是什么?你做的事情越容易,你得到答案的可能性就越大。 【参考方案1】:

使用 Saxon 作为架构验证器,我收到错误消息:

Validation error on line 2 column 39 of test.xml:
  FORG0001: The content "Ethernet" of element <AdapterName> does not match the required
  simple type. Value "Ethernet" contravenes the maxLength facet "3" of the type of element AdapterName
  See http://www.w3.org/TR/xmlschema-2/#cvc-datatype-valid clause 1
Validation error on line 3 column 36 of test.xml:
  FORG0001: The content "WI-FI" of element <AdapterName> does not match the required simple
  type. Value "WI-FI" contravenes the maxLength facet "3" of the type of element AdapterName
  See http://www.w3.org/TR/xmlschema-2/#cvc-datatype-valid clause 1

希望这些信息很清楚:您已将 AdapterName 的值限制为 1 到 3 个字符,并且您的值比这更长。

【讨论】:

以上是关于xml 和 xsd 的架构验证失败的主要内容,如果未能解决你的问题,请参考以下文章

XML 的 XSD 验证失败

AJV 架构验证失败

使用 C++ 针对 xsd 验证 xml

Maven 中的 XML DTD/Schema 验证

XMLDSig X509SerialNumber 太大而不能成为 int,XSD 验证失败

如何根据 XSD 模式验证 XML 结构的单个条目