- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
XSD:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:DataBodyTemperature="Docobo.DataBodyTemperature" attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="tDataBodyTemperature">
<xs:sequence>
<xs:element name="Answer" type="xs:double" />
<xs:element minOccurs="0" maxOccurs="1" name="AmbientTemperature" type="xs:double" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="tDataItem">
<xs:choice>
<xs:element name="DataBodyTemperature" type="tDataBodyTemperature" />
</xs:choice>
</xs:complexType>
<xs:element name="DataItem">
<xs:complexType>
<xs:complexContent mixed="false">
<xs:extension base="tDataItem">
<xs:attribute fixed="1" name="SchemaVersion" type="xs:integer" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:schema>
XML:
<DataItem>
<DataBodyTemperature xmlns:DataBodyTemperature="Docobo.DataBodyTemperature">
<DataBodyTemperature:Answer>37.8</DataBodyTemperature:Answer>
<DataBodyTemperature:AmbientTemperature>28.5</DataBodyTemperature:AmbientTemperature>
</DataBodyTemperature >
</DataItem>
我收到验证错误:Xml 架构验证失败:元素“DataBodyTemperature”在命名空间“Docobo.DataBodyTemperature”中具有无效的子元素“Answer”。预期的可能元素列表:'Answer'
最佳答案
您的问题是您的架构未指定目标命名空间 - 因此所有类型都与 null 命名空间相关联。
你的错误是因为模式指定 DataBodyTemperature
元素(在 null 命名空间中)应该只包含 Answer
和 AmbientTemperature
元素(它们都在 null 命名空间中声明),但是在您的文档中,这些元素实际上位于 Docobo.DataBodyTemperature
命名空间中,本质上使它们成为完全不同的元素。
符合您给定模式的 xml 示例是:
<DataItem SchemaVersion="1">
<DataBodyTemperature>
<Answer>1</Answer>
<AmbientTemperature>1</AmbientTemperature>
</DataBodyTemperature>
</DataItem>
请注意,没有 namespace 声明 - 所有元素都在默认 namespace 中。我怀疑您真正想要的是修改您的 xsd,以便它指定一个目标命名空间。
<xs:schema targetNamespace="Docobo.DataBodyTemperature" xmlns:dbt="Docobo.DataBodyTemperature" attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="tDataBodyTemperature">
<xs:sequence>
<xs:element name="Answer" type="xs:double" />
<xs:element minOccurs="0" maxOccurs="1" name="AmbientTemperature" type="xs:double" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="tDataItem">
<xs:choice>
<xs:element name="DataBodyTemperature" type="dbt:tDataBodyTemperature" />
</xs:choice>
</xs:complexType>
<xs:element name="DataItem">
<xs:complexType>
<xs:complexContent mixed="false">
<xs:extension base="dbt:tDataItem">
<xs:attribute fixed="1" name="SchemaVersion" type="xs:integer" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:schema>
请注意,您现在还需要限定 tDataItem
和 tDataBodyTemperature
类型,因为它们不再在 null 命名空间中声明。
另请注意,在您的相同 XML 中,DataItem
和 DataBodyTemperature
元素不在“Docobo.DataBodyTemperature”命名空间中,因此现在不会针对以上模式。
您可能还会发现获取架构的示例 xml 文档很有帮助 - 您可以在 Visual Studio 2008 或更高版本中使用 XML 架构资源管理器执行此操作,请参阅 How to generate sample XML documents from their DTD or XSD? .
关于针对 XSD : The element xxx has invalid child element yyy in namespace zzz 的 XML 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7497952/
我是一名优秀的程序员,十分优秀!