Проверка допустимости 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>