XmlDocument.Load Vs XmlDocument.LoadXml

2020-03-08 07:57发布

问题:

I just came across with a problem using XmlDocument.LoadXml.

The application was crashing, giving the following error:

"Data at the root level is invalid. Line 1, position 1"

After inspecting the XML and finding nothing wrong with it, I googled a bit and found a tip to use XmlDocument.Load instead of XmlDocument.LoadXml.

I have tried it and it works perfectly.

My question is: What is the difference between the 2 methods and what could have cause one to work and the other to fail?

回答1:

XmlDocument.Load is used to load XML either from a stream, TextReader, path/URL, or XmlReader. XmlDocument.LoadXml is used to load the XML contained within a string.

They're fundamentally different ways of loading XML, depending on where the XML is actually stored. So it sounds like you were using the wrong method for where your XML is.



回答2:

Were you trying to use XmlDocument.LoadXml and passing in the name of a file? It doesn't do that - it assumes that the string you pass in is the XML. So you might use:

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

or

doc.Load("myfile.xml");

If that doesn't help, could you show your failing and working code? There are different ways you could have changed from using LoadXml to Load...



回答3:

Assuming your using XmlDocument.Load and XmlDocument.LoadXml in the right way this problem may be caused by Byte Order Mark.

This other question might be useful.



回答4:

Load() loads from a certain source, whereas LoadXml() loads directly from a string



回答5:

The application was crashing with the following error: "Data at the root level is invalid. Line 1, position 1" I suspect you xml data does not have a root level: for example:

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

you need have at least one root level on top of the bottom levels. for example:

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

so please put one mother on the top of your level, make it grand grand mother of all children