Я считаю, что проблема заключается в том, что при загрузке строки, не отформатированной в XML, в объект XmlReader.
«XmlReader обеспечивает прямой доступ только для чтения к потоку данных XML. Класс XmlReader соответствует расширяемому языку разметки W3C (XML) 1.0 и пространствам имен в рекомендациях XML». & "XmlReader создает исключение XmlException при ошибках синтаксического анализа XML." - Статья класса MSDN XmlReader http://msdn.microsoft.com/en-us/library/system.xml.xmlreader.aspx
Попробуйте вместо этого загрузить и прочитать фактические данные XML, изменив:
TextReader tr = new StringReader("a [ z ]");
до:
TextReader tr = new StringReader("<node>a [ z ]</node>");
или поочередно, если вам нужна каждая фигура в своем собственном узле:
TextReader tr = new StringReader("<node>a</node><node> </node><node>[</node><node> </node><node>z</node><node> </node><node>]</node>");
Я предоставляю полный источник для последнего примера, потому что я ДУМАЮ, что это то, к чему вы стремитесь здесь.
TextReader tr = new StringReader("<node>a</node><node> </node><node>[</node><node> </node><node>z</node><node> </node><node>]</node>");
XmlReaderSettings settings = new XmlReaderSettings
{
ConformanceLevel = ConformanceLevel.Fragment,
ProhibitDtd = false,
ValidationType = ValidationType.None,
XmlResolver = null,
CheckCharacters = false,
IgnoreProcessingInstructions = true,
};
XmlReader reader = XmlReader.Create(tr, settings);
reader.Read();
StringBuilder sb = new StringBuilder();
while (!reader.EOF)
{
string s = reader.ReadElementString();
if (s != " ")
{
sb.Append(s);
}
}
Это позволит вам перебирать узлы, получая полные строковые значения без исключений.
~ md5sum ~