Как игнорировать начальные пробелы в файле XML? - PullRequest
0 голосов
/ 05 мая 2011

Мне нужно загрузить XML из файла в XmlDocument. Проблема в том, что файл содержит некоторые пробелы. (У меня нет контроля над системой, которая производит файл.) Есть ли какой-нибудь простой / простой способ игнорировать или убирать этих персонажей?

string SamplelRequestFile = @"C:\example.xml";
XmlDocument docXML = new XmlDocument(); 
XmlTextReader xReader = new XmlTextReader(SamplelRequestFile);
XmlReaderSettings ReaderSettings = new XmlReaderSettings();
ReaderSettings.XmlResolver = null;
ReaderSettings.ProhibitDtd = false;
docXML.Load(xReader);

example.xml (обратите внимание на первые пробелы)

  <?xml version="1.0" ?>
<myRoot>
<someElement />
</myRoot>

Ответы [ 6 ]

4 голосов
/ 05 мая 2011

Вам просто нужно сделать что-то вроде

 using (StreamReader sr = new StreamReader(@"C:\example.xml"))
 {
      XmlDocument docXML = new XmlDocument(); 
      docXML.LoadXml(sr.ReadToEnd().Trim());
      ...
 }
3 голосов
/ 05 мая 2011

Это недопустимый XML .

Согласно спецификации XML, pi или инструкции обработки должны быть первыми символами, если ониприсутствуют.

Я предлагаю вам предварительно обработать XML с помощью обрезки XML.


Обходной путь:

string content = File.ReadAllText(@"C:\example.xml");
XmlDocument doc = new XmlDocument();
doc.LoadXml(content.Trim());
2 голосов
/ 05 мая 2011

Вот пример, который работает:

        string file = @"C:\example.xml";
        XmlDocument docXML = new XmlDocument();
        using (TextReader x = new StreamReader(file))
        {
            while (x.Peek() == ' ')
                x.Read();
            docXML.Load(x);
        }
1 голос
/ 05 мая 2011

Создайте Stream и StreamReader для файла самостоятельно, затем Peek() и используйте символы из потока, пока вы видите пробел. Убедившись, что следующим символом является <, передайте поток конструктору XmlTextReader.

0 голосов
/ 05 мая 2011
string newXml = string.TrimLeft(oldXml);
0 голосов
/ 05 мая 2011

Вы пытались добавить этот флаг?

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