Проверка допустимости XML-документа, используя XSD-схему - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, нужно выполнить проверку допустимости XML-документа, используя XSD-схему. Вот схема
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="art">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ArtName" type="xs:string" />
        <xs:element maxOccurs="unbounded" name="Painter">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Name" type="xs:string" />
              <xs:element maxOccurs="unbounded" name="Сountry" type="xs:string" />
              <xs:element name="DateofBirth" type="xs:string" />
            </xs:sequence>
            <xs:attribute name="PNum" type="xs:unsignedByte" use="required" />
            <xs:attribute name="Style" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
Вот XML документ
<?xml version="1.0" encoding="utf-8"?>
<art>
    <ArtName>Picture</ArtName>
            xmlns="urn:MyUri"
        xmlns:xsi="http://www.w3.org/2001/SMLSchema-instance"
        xsi:schemaLocation="urn:MyUri file://File.xsd">
    <Painter PNum="1" Style="Romanticism">
        <Name>Aivazovsky Ivan</Name>
        <Country>Russia</Country>
        <DateofBirth>1817.07.29</DateofBirth>
    </Painter>
    <Painter PNum="2" Style="The post-impressionism">
    xsi:schemaLocation="namespace-url-of-XSD-schema"
        <Name>Van Gogh Vincent</Name>
    xsi:schemaLocation="namespace-url-of-XSD-schema"
        <Country>Netherlands</Country>
        xsi:schemaLocation="namespace-url-of-XSD-schema"
        <DateofBirth>1853/03/30[</DateofBirth>
    </Painter>
    <Painter PNum="3" Style="Realism">
    xsi:schemaLocation="namespace-url-of-XSD-schema"
        <Name>Ilya Repin</Name>
        xsi:schemaLocation="namespace-url-of-XSD-schema"
        <Country>Russia</Country>
        xsi:schemaLocation="namespace-url-of-XSD-schema"
        <DateofBirth>1844/07/24</DateofBirth>
    </Painter>
</art>
И программа
using System;
using System.Xml;
using System.Xml.Schema;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace lab5
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlTextReader tr = new XmlTextReader("2.xml");
            XmlValidatingReader vr = new XmlValidatingReader(tr);
            vr.ValidationType = ValidationType.Schema;
            vr.ValidationEventHandler += new ValidationEventHandler(MyHandler);
            try
            {
                while (vr.Read())
                {
                    if (vr.NodeType == XmlNodeType.Element && vr.LocalName == "NumEmps")
                    {
                        int num;
                        num = XmlConvert.ToInt32(vr.ReadElementString());
                        Console.WriteLine("Number of employees: " + num);
                    }
                }
            }
            catch (XmlException ex)
            {
                Console.WriteLine("XMLException occurred: " + ex.Message);
            }
            finally
            {
                vr.Close();
            }
        }
 
        public static void MyHandler(object sender, ValidationEventArgs e)
        {
 
            Console.WriteLine("Validation Error: " + e.Message);
        }
    }
}
при запуске программы пишет
Validation Error: Не удалось найти информацию о схеме для элемента "art".
Validation Error: Не удалось найти информацию о схеме для элемента "ArtName".
Validation Error: Не удалось найти информацию о схеме для элемента "Painter".
Validation Error: Не удалось найти информацию о схеме для атрибута "PNum".
Validation Error: Не удалось найти информацию о схеме для атрибута "Style".
Validation Error: Не удалось найти информацию о схеме для элемента "Name".
Validation Error: Не удалось найти информацию о схеме для элемента "Country".
Validation Error: Не удалось найти информацию о схеме для элемента "DateofBirth"
.
Validation Error: Не удалось найти информацию о схеме для элемента "Painter".
Validation Error: Не удалось найти информацию о схеме для атрибута "PNum".
Validation Error: Не удалось найти информацию о схеме для атрибута "Style".
Validation Error: Не удалось найти информацию о схеме для элемента "Name".
Validation Error: Не удалось найти информацию о схеме для элемента "Country".
Validation Error: Не удалось найти информацию о схеме для элемента "DateofBirth"
.
Validation Error: Не удалось найти информацию о схеме для элемента "Painter".
Validation Error: Не удалось найти информацию о схеме для атрибута "PNum".
Validation Error: Не удалось найти информацию о схеме для атрибута "Style".
Validation Error: Не удалось найти информацию о схеме для элемента "Name".
Validation Error: Не удалось найти информацию о схеме для элемента "Country".
Validation Error: Не удалось найти информацию о схеме для элемента "DateofBirth"
Подозреваю, что что-то не так с пространством имен, а что именно?
исправил в программе
if (vr.NodeType == XmlNodeType.Element && vr.LocalName == "Name" || vr.LocalName == "Country" || vr.LocalName == "Art")
                    {
                        String num;
                        num = (vr.ReadElementString());
                        Console.WriteLine("Number of employees: " + num);
                    }
И теперь вот что выводит
Validation Error: Не удалось найти информацию о схеме для элемента "Name".
Number of employees: Aivazovsky Ivan
Validation Error: Не удалось найти информацию о схеме для элемента "Country".
Number of employees: Russia
Validation Error: Не удалось найти информацию о схеме для элемента "DateofBirth"
.
Validation Error: Не удалось найти информацию о схеме для элемента "Painter".
Validation Error: Не удалось найти информацию о схеме для атрибута "PNum".
Validation Error: Не удалось найти информацию о схеме для атрибута "Style".
Validation Error: Не удалось найти информацию о схеме для элемента "Name".
Number of employees: Van Gogh Vincent
Validation Error: Не удалось найти информацию о схеме для элемента "Country".
Number of employees: Netherlands
Validation Error: Не удалось найти информацию о схеме для элемента "DateofBirth"
.
Validation Error: Не удалось найти информацию о схеме для элемента "Painter".
Validation Error: Не удалось найти информацию о схеме для атрибута "PNum".
Validation Error: Не удалось найти информацию о схеме для атрибута "Style".
Validation Error: Не удалось найти информацию о схеме для элемента "Name".
Number of employees: Ilya Repin
Validation Error: Не удалось найти информацию о схеме для элемента "Country".
Number of employees: Russia
Validation Error: Не удалось найти информацию о схеме для элемента "DateofBirth"

Решение задачи: «Проверка допустимости XML-документа, используя XSD-схему»

textual
Листинг программы
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:MyUri">
  <xs:element name="art">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ArtName" type="xs:string" />
        <xs:element maxOccurs="unbounded" name="Painter">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Name" type="xs:string" />
              <xs:element maxOccurs="unbounded" name="Country" type="xs:string" />
              <xs:element name="DateofBirth" type="xs:string" />
            </xs:sequence>
            <xs:attribute name="PNum" type="xs:unsignedByte" use="required" />
            <xs:attribute name="Style" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.846 из 5