Проверка допустимости XML-документа, используя XSD-схему - C#
Формулировка задачи:
Здравствуйте, нужно выполнить проверку допустимости XML-документа, используя XSD-схему.
Вот схема
Вот XML документ
И программа
при запуске программы пишет
Подозреваю, что что-то не так с пространством имен, а что именно?
И теперь вот что выводит
Листинг программы
- <?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 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>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д