xml - 为什么这个 XML 对这个 XSD 有效?
问题描述
我是 XML 新手,现在正在解析 XML 文件。在验证 XML 文件时,我们收到一个错误:
发现以元素“nxce:element”开头的无效内容。此时不需要子元素。
XSD 使用了 4 个元素的选择指示器。XML 文件包含所有 4 个元素的条目,因此我们认为错误是由于错误使用选择指示器而发生的。实际的 XML 非常复杂,因此为了检查选择指标的工作情况并使用更简单的文件重现相同的错误,我开发了一个 XML 文件和一个 XSD 文件。我在验证 XML 文件时预期会出错,但验证 XML 文件时没有任何错误。
XML 文件
<?xml version="1.0" encoding="UTF-8"?>
<employee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="file:///EmployeeSchema.xsd">
<emp>
<empid>3</empid>
<name>Name</name>
<address>
<building>Building</building>
<pincode>Pincode</pincode>
<street>Street</street>
<area>Area</area>
</address>
</emp>
</employee>
XSD 文件
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="employee">
<xs:complexType>
<xs:sequence>
<xs:element name="emp">
<xs:complexType>
<xs:sequence>
<xs:element name="empid" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="address">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element name="street" type="xs:string" />
<xs:element name="area" type="xs:string" />
</xs:sequence>
<xs:sequence>
<xs:element name="building" type="xs:string" />
<xs:element name="pincode" type="xs:string" />
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
由于choice
指示器指定可能出现一个子元素或另一个子元素,因此我期望在address
标签中出现错误,我使用了所有 4 个元素。但是 XML 在 eclipse 中被验证没有任何错误。您能否告诉我,为什么我在验证 XML 时没有收到错误?
解决方案
您期望您的 XML 对您的 XSD 无效是正确的。
您的 XML 甚至可能没有针对您的预期 XSD 进行验证,因为您的 XML 指定
xsi:schemaLocation="file:///EmployeeSchema.xsd"
它应该在哪里指定:
xsi:noNamespaceSchemaLocation="file:///EmployeeSchema.xsd"
请注意,使用xsi:schemaLocation
命名空间-URL对,而不仅仅是 XSD 的 URL,以在每个命名空间的基础上定位 XSD。由于您的 XML 不使用命名空间,因此请使用xsi:noNamespaceSchemaLocation
如上所示的而不是xsi:schemaLocation
.
也可以看看
推荐阅读
- javascript - 单击时在 OSM 上显示标记弹出窗口 - Angular 7
- c++ - Win flex-bison 编译产生无效字符错误
- dna-sequence - 如何使用 bedtools 覆盖来评估基因组组装?
- python - 用列多索引(df.fillna)将数据框中仅一列的“NaN”值替换为最后一个有效值
- boto3 - 如何在完成 Boto3 单元测试之前等待 CodeBuild 项目完成构建?
- html - Bootstrap v 4.1.3 - 导航栏放置项目
- paas - 是否有允许在传入 TCP 连接上唤醒 VM/容器的云服务?
- c# - 进行 API 调用时出现 404 错误,即使请求计数增加
- python - deeplab 的自定义损失
- airflow - 如何抑制气流 cli 输出中的错误?