【问题标题】:Validating XML document against XSD returns an error "element is not declared"针对 XSD 验证 XML 文档返回错误“未声明元素”
【发布时间】:2021-12-16 22:22:58
【问题描述】:

我正在尝试根据 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-namespaces xsd-validation xml-validation


    【解决方案1】:

    如果您进行这两项更改,您的 XML 将根据您的 XSD 有效:

    1. 向您的 XML 添加默认命名空间以匹配 XSD 的 targetNamespace.
    2. 调整 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多