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

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

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

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

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

textual
Листинг программы
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:MyUri">
  3.   <xs:element name="art">
  4.     <xs:complexType>
  5.       <xs:sequence>
  6.         <xs:element name="ArtName" type="xs:string" />
  7.         <xs:element maxOccurs="unbounded" name="Painter">
  8.           <xs:complexType>
  9.             <xs:sequence>
  10.               <xs:element name="Name" type="xs:string" />
  11.               <xs:element maxOccurs="unbounded" name="Country" type="xs:string" />
  12.               <xs:element name="DateofBirth" type="xs:string" />
  13.             </xs:sequence>
  14.             <xs:attribute name="PNum" type="xs:unsignedByte" use="required" />
  15.             <xs:attribute name="Style" type="xs:string" use="required" />
  16.           </xs:complexType>
  17.         </xs:element>
  18.       </xs:sequence>
  19.     </xs:complexType>
  20.   </xs:element>
  21. </xs:schema>

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут