9

I've got a large xml document in a string. What's the best way to determine if the xml is well formed?

PaulB
  • 23,264
  • 14
  • 56
  • 75

4 Answers4

15

Something like:

    static void Main() {
        Test("<abc><def/></abc>");
        Test("<abc><def/><abc>");
    }
    static void Test(string xml) {
        using (XmlReader xr = XmlReader.Create(
                new StringReader(xml))) {
            try {
                while (xr.Read()) { }
                Console.WriteLine("Pass");
            } catch (Exception ex) {
                Console.WriteLine("Fail: " + ex.Message);
            }
        }
    }

If you need to check against an xsd, then use XmlReaderSettings.

Marc Gravell
  • 1,026,079
  • 266
  • 2,566
  • 2,900
5

Simply run it through a parser. That will perform the appropriate checks (whether it parses ok).

If it's a large document (as indicated) then an event-based parser (e.g. SAX) will be appropriate since it won't store the document in memory.

It's often useful to have XML utilities around to check this sort of stuff. I use XMLStarlet, which is a command-line set of tools for XML checking/manipulation.

Brian Agnew
  • 268,207
  • 37
  • 334
  • 440
3

XmlReader seems a good choice as it should stream the data (not load the whole xml in one go)

http://msdn.microsoft.com/en-us/library/9d83k261.aspx

bh213
  • 6,343
  • 9
  • 43
  • 52
2

Try using an XmlReader with an XmlReaderSettings that has ConformanceLevel.Document set.

dommer
  • 19,610
  • 14
  • 75
  • 137