xml - 针对 XSD 验证 XML 文档返回错误“未声明元素”
问题描述
我正在尝试针对 XSD 文档验证 XML 文档。
这是我的 XML:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfProduct xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Product IdProduct="1" NameProduct="1" PriceProduct="1" availability="1" IdSup="1" />
</ArrayOfProduct>
这是我的 XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/Products">
<xs:element name="ArrayOfProduct">
<xs:complexType>
<xs:sequence>
<xs:element ref="Product"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Product">
<xs:complexType>
<xs:attribute name="PriceProduct" use="required" type="xs:integer"/>
<xs:attribute name="IdSup" use="required" type="xs:integer"/>
<xs:attribute name="IdProduct" use="required" type="xs:integer"/>
<xs:attribute name="NameProduct" use="required" type="xs:integer"/>
<xs:attribute name="availability" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
</xs:schema>
这是我的 C# 代码:
XmlReaderSettings ProductSettings = new XmlReaderSettings();
ProductSettings.Schemas.Add("http://www.contoso.com/Products", "XmlSchema.xsd");
ProductSettings.ValidationType = ValidationType.Schema;
ProductSettings.ValidationEventHandler += new ValidationEventHandler(ProductSettingsValidationEventHandler);
XmlReader Products = XmlReader.Create(doc + ".xml", ProductSettings);
while (Products.Read()) { }
每次我尝试根据我的 XSD 文档验证我的 XML 文档时,我都会收到一个错误:
未声明 Product 元素。
解决方案
如果您进行这两项更改,您的 XML 将根据您的 XSD 有效:
- 将默认命名空间添加到您的 XML 以匹配 XSD
targetNamespace.
- 调整 XSD 中的
ref="Product"
引用以包含 XSD 的命名空间前缀targetNamespace
。
XML
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfProduct xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.contoso.com/Products">
<Product IdProduct="1" NameProduct="1"
PriceProduct="1" availability="1" IdSup="1" />
</ArrayOfProduct>
XSD
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://www.contoso.com/Products"
xmlns:p="http://www.contoso.com/Products">
<xs:element name="ArrayOfProduct">
<xs:complexType>
<xs:sequence>
<xs:element ref="p:Product"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Product">
<xs:complexType>
<xs:attribute name="PriceProduct" use="required" type="xs:integer"/>
<xs:attribute name="IdSup" use="required" type="xs:integer"/>
<xs:attribute name="IdProduct" use="required" type="xs:integer"/>
<xs:attribute name="NameProduct" use="required" type="xs:integer"/>
<xs:attribute name="availability" use="required" type="xs:integer"/>
</xs:complexType>
</xs:element>
</xs:schema>
推荐阅读
- sql-server-2012 - Windows Server 2008 + SQL Server 2012 中的 SERVERPROPERTY('ProductVersion') 值
- image-processing - 如何使用 DBSCAN 对图像进行聚类并通过图像获取输出?
- objective-c - Coredata 中的 __NSSingleObjectArrayI
- python - 在单行中打印不带括号的混合列表
- mysql - 在一个查询中检查多个表
- laravel - 为什么一张表正在更新而另一张不在 laravel 中?
- amazon-web-services - AWS弹性beantalk将www重定向到具有nginx位置的非www?
- dialogflow-es - Dialogflow 可以用视频响应吗?
- hyperledger-fabric - 更新 Hyperledger Fabric 中的私有数据收集策略
- react-native - 如何导入 React 原生导航器?