Используя XmlReader, я выполняю проверку схемы для элементов XML, чей тип данных не допускает перевод строки.Если значение содержит перевод строки в начале или в любом месте до конца строки, проверка схемы завершается неудачно, как и ожидалось.Если значение заканчивается пробелом перед переводом строки, оно завершается ошибкой схемы.Только когда перевод строки находится в конце строки, проверка схемы не завершится неудачно.Я считаю, что это должно произойти сбой.
Вот пример схемы:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="StringContent" type="an" />
<xs:simpleType name="an">
<xs:restriction base="xs:string">
<xs:pattern value="[ !-~]*"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
Вот пример кода:
var xmlSchemaSet = new XmlSchemaSet();
xmlSchemaSet.Add(XmlSchema.Read(new StringReader(schema),
(sender, args) => { Console.WriteLine(args.Exception.Message); }));
var xmlReaderSettings = new XmlReaderSettings
{
ValidationType = ValidationType.Schema,
Schemas = xmlSchemaSet
};
xmlReaderSettings.ValidationEventHandler +=
delegate (object sender, ValidationEventArgs args)
{
Console.WriteLine($"{description}: {args.Exception.Message}");
};
var xmlDateReader = XmlReader.Create(
new StringReader("<StringContent>some string content\n</StringContent>"), xmlReaderSettings);
while (xmlDateReader.Read()) { }
Фактическая схема, которую мы используемуправляется органом по стандартизации, и в результате я не могу его изменить.Есть ли способ заставить XmlReader корректно завершить проверку схемы при наличии завершающего перевода строки?