【问题标题】:XML Validation error: The element is not declaredXML 验证错误:未声明元素
【发布时间】:2016-01-07 14:11:39
【问题描述】:

我正在 .NET 中构建一个 Web 服务,它将通过 XML 来回传递数据。我想使用我定义的 XSD 验证传入请求中的 XML。

这是 XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:complexType name="POSearch">
       <xs:sequence minOccurs="0" maxOccurs="10">
           <xs:element name="POID" type="xs:positiveInteger"/>
       </xs:sequence>
   </xs:complexType>
</xs:schema>

这是 XML:

<POSearch>
   <POID>1</POID>
   <POID>2</POID>
</POSearch>

这是 C# 中的验证代码:

static void Main(string[] args){
   XmlSchemaSet iSchemas = new XmlSchemaSet();
   iSchemas.Add(string.Empty, @"...xsd file location");

   XmlReaderSettings settings = new XmlReaderSettings();
   settings.ValidationType = ValidationType.Schema;
   settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
   settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
   settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
   settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
   settings.Schemas.Add(iSchemas);

   XmlReader reader = XmlReader.Create(@"...xml file location", settings);

   try {
      while(reader.Read())
       ;
   }
   catch(Exception ex) {
      Console.WriteLine(ex.Message);
   }
}

private static void ValidationCallBack(object sender, ValidationEventArgs args) {
     if(args.Severity == XmlSeverityType.Warning)
        Console.WriteLine("\tWarning: Matching schema not found.  No validation occurred." + args.Message);
     else
        Console.WriteLine("\tValidation error: " + args.Message);
  }

我觉得我以前有这个工作,但我不完全确定为什么现在不能工作。每当我运行它时,我都会收到以下异常消息:

验证错误:未声明“POSearch”元素。

我是否错误地定义了我的 XSD?我的验证码错了吗?元素都清楚地在那里。非常感谢任何为我指明正确方向的帮助。

【问题讨论】:

  • 这是我在 StackOverflow 中找到的 10 个中唯一可行的解​​决方案:“验证错误:'x' 元素未声明。”问题。

标签: c# xml xsd xml-validation


【解决方案1】:

您声明了该类型,但没有声明该类型的元素。

添加元素声明:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

   <xs:element name="POSearch" type="POSearch"/>

   <xs:complexType name="POSearch">
       <xs:sequence minOccurs="0" maxOccurs="10">
           <xs:element name="POID" type="xs:positiveInteger"/>
       </xs:sequence>
   </xs:complexType>
</xs:schema>

【讨论】:

  • 谢谢。我一直在为此拔头发。我是 XSD 的新手
【解决方案2】:

试试这个:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:complexType name="POSearch">
       <xs:sequence minOccurs="0" maxOccurs="10">
           <xs:element name="POID" type="xs:positiveInteger"/>
       </xs:sequence>
   </xs:complexType>
    <xs:element name="POSearch" type="POSearch"/>
</xs:schema>

【讨论】:

    【解决方案3】:

    在您的构建路径中添加“javax.xml.bind.jar”,它应该很好。如果您正在执行 maven 项目,请添加此 jar 的依赖项。

    【讨论】:

    • 您确定您将此答案添加到了正确的问题中吗?这是一个 C# 问题。
    猜你喜欢
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多