Я сталкиваюсь с реальными трудностями при проверке XML с помощью XSD . Я должен префикс всего этого и заявить заранее, я новичок в XSD и проверке, поэтому я не уверен, является ли это проблемой кода или проблемой XML. Я был в аду XML API и вернулся с баджиллионом различных вариантов и думаю, что нашел идеальную стратегию для проверки XML с помощью XSD. Обратите внимание, что мои XML и XSD поступают из базы данных, поэтому мне не нужно ничего читать с диска.
Я сузил свою задачу до простого примера Windows Forms приложения. Он имеет текстовое поле для XSD (txtXsd), текстовое поле для XML (txtXml), текстовое поле для результата (txtResult) и кнопку для запуска проверки (btnValidate).
Я использую образец XSD-файла от Microsoft,
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:bookstore-schema" elementFormDefault="qualified" targetNamespace="urn:bookstore-schema">
<xsd:element name="title" type="xsd:string" />
<xsd:element name="comment" type="xsd:string" />
<xsd:element name="author" type="authorName"/>
<xsd:complexType name="authorName">
<xsd:sequence>
<xsd:element name="first-name" type="xsd:string" />
<xsd:element name="last-name" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Я использую следующий код в своем приложении.
private void btnValidate_Click (object sender, EventArgs e)
{
try
{
XmlTextReader reader = new XmlTextReader(txtXsd.Text, XmlNodeType.Document, new XmlParserContext(null, null, String.Empty, XmlSpace.None));
XmlSchema schema = XmlSchema.Read(reader, null);
XmlSchemaSet schemas = new XmlSchemaSet();
schemas.Add(schema);
XDocument doc = XDocument.Parse(txtXml.Text);
doc.Validate(schemas, ValidateSchema);
}
catch (Exception exception)
{
txtResult.Text += exception.Message + Environment.NewLine;
}
}
private void ValidateSchema (Object sender, ValidationEventArgs e)
{
txtResult.Text += e.Message + Environment.NewLine;
}
В качестве теста я вставил действительный XML, но то, что я считаю, не должно соответствовать приведенному выше XSD.
<xml>
<bogusNode>blah</bogusNode>
</xml>
Результат - ничто, никаких ошибок валидации. Как мне это исправить?