Я проверяю некоторые внешние XML-документы по моей схеме XSD:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="2011-03-01">
<xs:element name="Document" type="DocumentType" />
<xs:complexType name="DocumentType">
<xs:sequence>
<xs:element name="Author" type="string" minOccurs="0" />
<xs:element maxOccurs="unbounded" name="Receiver" type="string" />
</xs:sequence>
</xs:complexType>
Моя схема не использует пространства имен. Хорошо работает, но у меня проблемы с определенным XML.
Это файл Excel, сохраненный в формате XLM . Это полностью недействительно, но мой валидатор не жалуется.
Это недопустимо в соответствии с моей схемой, но мой метод не выдает никаких исключений! Это выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<office:document-content
xmlns:office="foo">
<office:bar></office:bar>
</office:document-content>
вот мой код:
public void Validate(Stream streamWithXML)
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(settings.Schemas.Add("", xsdPath));
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create(streamWithXML, settings);
XmlDocument document = new XmlDocument();
document.Load(reader);
ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler);
document.Validate(eventHandler);
reader.Close();
}
static void ValidationEventHandler(object sender, ValidationEventArgs e)
{}
У вас есть какие-либо подсказки? Я полагаю, это потому, что этот конкретный документ имеет некоторые объявления встроенных пространств имен. Однако онлайн-валидатор на http://tools.decisionsoft.com/schemaValidate/ выдает исключение:
Не удается найти объявление элемента
'Офис: документ-содержание'
.
что правильно. Есть ли способ заставить валидатор .NET выдавать исключение в этом случае?