Я пытаюсь проверить свой xml-файл с помощью XmlSchemaSet, но по какой-то причине ошибка не попадает, когда я читаю xml. Я почти уверен, что проблема не в моем xml или xsd, потому что, когда у меня есть xml open в visual studio, это на самом деле говорит мне, что мой атрибут содержит недопустимое значение.Проверка Xml с использованием xsd not caught
Xml:
<Test xmlns:testns="http://schemas.testnamespace.com/" xmlns="http://schemas.testnamespace.com/"
testns:foo="-903" />
XSD (пример взят из документации Microsoft по XSD: союз)
<?xml version="1.0"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://schemas.testnamespace.com/"
xmlns="http://schemas.testnamespace.com/"
elementFormDefault="qualified"
attributeFormDefault="qualified" >
<xs:element name="Test" >
<xs:complexType>
<xs:attribute name="foo">
<xs:simpleType>
<xs:union memberTypes="fontbynumber fontbystringname" />
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:simpleType name="fontbynumber">
<xs:restriction base="xs:positiveInteger">
<xs:maxInclusive value="72"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="fontbystringname">
<xs:restriction base="xs:string">
<xs:enumeration value="small"/>
<xs:enumeration value="medium"/>
<xs:enumeration value="large"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
Код проверки:
XmlSchemaSet sc = new XmlSchemaSet();
//Passing null instead of the namespace doesn't change anything
sc.Add("http://schemas.testnamespace.com/", "Bar.xsd");
sc.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
sc.Compile();
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
//I've tried all combinations of ValidationFlags and it doesn't change anything
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
settings.Schemas = sc;
using(XmlReader reader = XmlReader.Create(path, settings))
{
while(reader.Read()) ;
}
Я чувствую, что проблема может быть в потому что всякий раз, когда я использовал объединение или список, он никогда не ловит какую-либо ошибку, но как только я просто использую ограничение без союза или список он ловит ошибку ..
Пожалуйста, помогите :(
Да правильный путь и XSD также работает, потому что, если добавить недопустимый атрибут ошибка попадается или если у меня есть только ограничение и не объединение ошибка также попадается. Я использую .net 3.5, я действительно потерялся сейчас, у нас есть тот же код, как моя ошибка не попалась? Хм, я попытаюсь использовать .net 4.61 и посмотреть, не изменит ли это что-нибудь. – FlyOff
Единственное различие заключалось в том, что вы использовали консольное приложение, когда я использовал среду Unity Engine, поэтому я создал проект приложения тестовой консоли, поместил там код и работал.? Это самое странное из когда-либо, потому что все другие ошибки пойманы, кроме одного, и я не понимаю, почему это имеет значение для окружающей среды. В любом случае я попытаюсь изучить это дальше, спасибо за помощь. – FlyOff
Нечетная, какую версию System.Xml.dll вы ссылаетесь? – Sprotty