Проверка схемы XML не завершается с ошибкой в ​​конце строки - PullRequest
0 голосов
/ 10 декабря 2018

Используя 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 корректно завершить проверку схемы при наличии завершающего перевода строки?

1 Ответ

0 голосов
/ 10 декабря 2018
<xs:pattern value="[\w]+"/>

[\ w] +

Соответствует одному символу, который является «символом слова» (Unicode; любая буква или иероглиф, цифра, пунктуация соединителя) «[\ w] +» Между одними неограниченное количество раз, столько раз, сколько возможно, возвращая по мере необходимости (жадный) «+»

Проверка выполняется на основе схемы, если вы не являетесь владельцем схемы и не можете ее изменить, то соблюдайте ееправила или переговоры со стороной, которая предоставила вам схему.

Для сопоставления только строк, которые не содержат LF, используйте:

[^ \ n] +

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...