XmlDocument.Load Vs XmlDocument.LoadXml - PullRequest
       19

XmlDocument.Load Vs XmlDocument.LoadXml

19 голосов
/ 02 ноября 2009

Я только что столкнулся с проблемой, используя XmlDocument.LoadXml.

Приложение зависало, выдавая следующую ошибку:

"Недопустимые данные на корневом уровне. Строка 1, позиция 1"

Проверив XML и не обнаружив в нем ничего плохого, я немного погуглил и нашел подсказку для использования XmlDocument.Load вместо XmlDocument.LoadXml.

Я пробовал, и он отлично работает.

Мой вопрос: в чем разница между этими двумя методами и что может привести к тому, что один из них будет работать, а другой - не работать?

Ответы [ 5 ]

35 голосов
/ 02 ноября 2009

XmlDocument.Load используется для загрузки XML из потока, TextReader, path / URL или XmlReader. XmlDocument.LoadXml используется для загрузки XML, содержащегося в строке.

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

24 голосов
/ 02 ноября 2009

Вы пытались использовать XmlDocument.LoadXml и передавали имя файла? Он этого не делает - он предполагает, что передаваемая вами строка является XML Таким образом, вы можете использовать:

doc.LoadXml("<root><child /><root>");

или

doc.Load("myfile.xml");

Если это не поможет, не могли бы вы показать свой неисправный и работающий код? Существуют различные способы перехода с LoadXml на Load ...

3 голосов
/ 02 ноября 2009

Если вы используете XmlDocument.Load и XmlDocument.LoadXml в вправо , эта проблема может быть вызвана меткой порядка байтов .

Этот другой вопрос может быть полезен.

2 голосов
/ 02 ноября 2009

Load () загружается из определенного источника, тогда как LoadXml () загружается непосредственно из строки

0 голосов
/ 10 марта 2011

Приложение зависало со следующей ошибкой: «Данные на корневом уровне недействительны. Строка 1, позиция 1» Я подозреваю, что у вас xml-данных нет корневого уровня: например:

<area id="1">
  <candidate id="0">dataata</candidate>
</area>
<area id="2">
  <candidate id="0">dataataa</candidate>
</area>

вам нужно иметь хотя бы один корневой уровень поверх нижних уровней. например:

<areas>
  <area id="1">
    <candidate id="0">dataata</candidate>
  </area>
  <area id="2">
    <candidate id="0">dataataa</candidate>
  </area>
</areas>

поэтому, пожалуйста, поставьте одну мать на вершину своего уровня, сделайте это прабабушкой всех детей

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