I've got a large xml document in a string. What's the best way to determine if the xml is well formed?
Asked
Active
Viewed 1.8k times
4 Answers
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)

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