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'。预期可能元素列表:'回答'
答案 0 :(得分:4)
您的问题是您的架构没有指定目标命名空间 - 因此所有类型都与null命名空间相关联。
您的错误是由于架构指定DataBodyTemperature
元素(位于空命名空间中)应仅包含Answer
和AmbientTemperature
元素(两者都在null namespace),但是在您的文档中,这些元素实际上位于Docobo.DataBodyTemperature
命名空间中,基本上使它们成为完全不同的元素。
符合您给定架构的xml样本将是:
<DataItem SchemaVersion="1">
<DataBodyTemperature>
<Answer>1</Answer>
<AmbientTemperature>1</AmbientTemperature>
</DataBodyTemperature>
</DataItem>
请注意,没有名称空间声明 - 所有元素都在默认名称空间中。我怀疑你真正想要的是修改你的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命名空间中声明。
另请注意,在您的sameple XML中,DataItem
和DataBodyTemperature
元素不在“Docobo.DataBodyTemperature”命名空间中,因此现在不会针对上述模式进行验证。
您可能还发现获取模式的示例xml文档很有帮助 - 您可以使用XML模式资源管理器在Visual Studio 2008或更高版本中执行此操作,请参阅How to generate sample XML documents from their DTD or XSD?。