我需要根据 C# 中的 xsd 模式成功验证我的 xml 文件

I need to succesfully validate my xml file against xsd schema in C#

当我 运行 添加 xml 和 xsd 模式文件后的代码时,我收到错误消息,因为 "ID" 属性未声明,元素 'Student' 具有无效的子元素 'Student'。 验证失败 下面是我的代码:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Students>
  <Student ID="101">
    <Name>kamal</Name>
    <Gender>Male</Gender>
    <Marks>800</Marks>
  </Student>
  <Student ID="102">
    <Name>Sapna</Name>
    <Gender>Female</Gender>
    <Marks>900</Marks>
  </Student>
  <Student ID="103">
    <Name>Raju</Name>
    <Gender>Male</Gender>
    <Marks>870</Marks>
    <Student ID="104">
      <Name>Sushant</Name>
      <Gender>Male</Gender>
      <Marks>700</Marks>
    </Student>
  </Student>
</Students>

<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="Students">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Student" minOccurs="1" maxOccurs="4">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="Name" minOccurs="1" maxOccurs="1"/>
              <xsd:element name="Gender" minOccurs="1" maxOccurs="1"/>
              <xsd:element name="Marks" minOccurs="1" maxOccurs="1"/>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

最后是代码文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using System.Xml.Schema;

namespace ClassLibrary1
{
    class Class16
    {
        public static void Main()
        {
            XmlSchemaSet ss = new XmlSchemaSet();
            ss.Add("", @"C:\Users\admin\documents\visual studio 2013\Projects\ClassLibrary1\ClassLibrary1\Students.xsd");
             
            XDocument doc = XDocument.Load(@"C:\Users\admin\documents\visual studio 2013\Projects\ClassLibrary1\ClassLibrary1\sample1.xml");
             
            bool validationerror = false;
            doc.Validate(ss,(s,e)=>
                {
                    Console.WriteLine(e.Message);
                   validationerror = true;
                });
            if(validationerror)
            {
                Console.WriteLine("Validation failed");
                Console.ReadLine();

            }
            else
            {
                Console.WriteLine("Validation succeded");
                Console.ReadLine();
            }

                
        }
    }
}

你 XSD 和你 sample.xml 都必须改变。供您参考 请在下面找到正确的 XSD 和 xml 文件。

正确样本:

        <?xml version="1.0" encoding="utf-8" standalone="yes"?>
        <Students>
          <Student ID="101">
            <Name>kamal</Name>
            <Gender>Male</Gender>
            <Marks>800</Marks>
          </Student>
          <Student ID="102">
            <Name>Sapna</Name>
            <Gender>Female</Gender>
            <Marks>900</Marks>
          </Student>
          <Student ID="103">
            <Name>Raju</Name>
            <Gender>Male</Gender>
            <Marks>870</Marks>
            </Student>
            <Student ID="104">
              <Name>Sushant</Name>
              <Gender>Male</Gender>
              <Marks>700</Marks>
            </Student>
        </Students>

正确XSD:

<?xml version="1.0" encoding="utf-8" ?>
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
          <xsd:element name="Students">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="Student" minOccurs="1" maxOccurs="4">
                  <xsd:complexType>     
                    <xsd:sequence>
                      <xsd:element name="Name" minOccurs="1" maxOccurs="1"/>
                      <xsd:element name="Gender" minOccurs="1" maxOccurs="1"/>
                      <xsd:element name="Marks" minOccurs="1" maxOccurs="1"/>
                    </xsd:sequence>
                    <xsd:attribute name="ID" type="xsd:string" use="required" />
                  </xsd:complexType>
                </xsd:element>
              </xsd:sequence>
            </xsd:complexType>
          </xsd:element>
        </xsd:schema>