2016-05-30 3 views
1

Я пытаюсь проверить максимальные символы в XML-документе:проверки MaxCharactersInDocument не работает

string xml = "<X><Y><Z></Z><Z></Z><Z></Z></Y></X>"; 

var settings = new XmlReaderSettings 
       { 
        MaxCharactersInDocument = 10 
       }; 

try 
{ 
    using(var sr = new StringReader(xml)) 
    { 
     using(var xr = XmlReader.Create(sr)) 
     { 
      using(var xr2 = XmlReader.Create(xr, settings)) 
      { 
       while(xr2.Read()){} // MaxCharactersInDocument validation do not work 
      } 
     } 
    } 
} 
catch (XmlException ex) 
{ 
    Console.WriteLine(ex.Message); 
} 

заманчивым является проверка внешнего XML (полученным с XmlReader) для максимальной charcters. Почему проверка MaxCharactersInDocument не работает для XmlReader, созданного на другом XmlReader? Как я могу сделать эту проверку по-другому?

Кроме того, проверка схемы работает для второго читателя, но проверка макс. Символов не выполняется.

+0

Зачем вам два создать заявления? Вы можете добавить настройку в первый метод Create(). – jdweng

+0

@jdweng, первый читатель является внешним читателем для некоторых приложений. И предназначение - проверить внешний xml (полученный с XmlReader) для максимальных символов. Кроме того, проверка схемы работает для второго читателя, но проверка макс. Символов не выполняется. Зачем? –

+0

Это может быть проблема с кодировкой. При добавлении в список параметров StringReader() метод кодирования может решить проблему. – jdweng

ответ

0

Принимая взгляд на MSDN's working example for MaxCharactersInDocument,

Ниже будет также работать с входом:

 string markup = "<X><Y><Z></Z><Z></Z><Z></Z></Y></X>"; 

     //string markup = "<Root>Content</Root>"; 

     XmlReaderSettings settings = new XmlReaderSettings(); 
     settings.MaxCharactersInDocument = 10; 

    try 
    { 
     XmlReader reader = XmlReader.Create(new StringReader(markup), settings); 
     while (reader.Read()) { } 
    } 
    catch (XmlException ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 

Кажется, что StringReader объект должен быть использован в качестве входных данных в методе XmlReader.Create для его работы.


Выход:

enter image description here

+0

Выглядит в связи с тем, что заметил @jdweng ... – Veverke

Смежные вопросы