2012-01-27 3 views
0

У меня есть xml-файл с узлом, который содержит некоторый код C#.Класс XmlDocument не загружает файл, содержащий узел с кодом C#

<Script Name="WrapText"> 
     var sb = new System.Text.StringBuilder(); 
     int lastSpaceIndex = 0; 

      for(int i = 0; i < paragraph.length; i++) 
      { 
       var curChar = paragraph[i]; 
       sb.Append(curChar); 

       if (System.Char.IsWhiteSpace(curChar)) 
       { 
        lastSpaceIndex = i; 
       } 

       if (i % splitlength == 0) 
       { 
        if (lastSpaceIndex != 0) 
        { 
         sb[lastSpaceIndex] = '\n'; 
        } 
       } 
      } 

     return sb.ToString(); 
</Script> 

, когда я пытаюсь загрузить это с помощью кабеля XMLDOCUMENT и XmlReader классы в C# как это:

 
    XmlReader xReader = XmlReader.Create(new MemoryStream(ASCIIEncoding.UTF8.GetBytes(imml)), _ReaderSettings); 
    XmlDocument xDoc = new XmlDocument(); 
    xDoc.Load(xReader); 

Я получаю эту ошибку:

 
    Name cannot begin with the ' ' character, hexadecimal value 0x20. Line 25, position 21. 

Если я удалить для линии контура , он загружает файл без каких-либо проблем.

Почему это происходит?

+0

если вы изменили свой XML-файл, чтобы иметь CDATA вокруг кода C#, это сработает? – Anton

ответ

3

Создание XML вручную/с конкатенацией строк всегда вызывает такие проблемы: вы < неправильно закодированы и в результате < paragraph.length; i++)... рассматривается как имя элемента.

При необходимости необходимо закодировать все специальные символы. (то есть &lt; для <). См. http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references для компактного списка.

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