Out of the Angle Brackets
This is the next post in our ongoing FAQ series. See the original post here.
Q2: Conformance Level – Fragment
There are times when you want to work with a piece of XML that is not a fully conformant xml document; an example of this is when the XML does not have one root element. This type of XML is called an XML fragment. Here is an example of an XML fragment:
“<foo></foo><bar></bar>”
If this snippet of XML is used as the source for to the XmlReader, the following exception will occur:
“There are multiple root elements. Line X, position Y.”
This is a good exception message and tells the user exactly what the problem is: more than one root element is not allowed in an XML document. But what happens if you really want to work with XML of this form? A flag in the XmlReaderSettings class is provided for exactly this situation: XmlReaderSettings.ConformanceLevel.
Code snippet to correctly read the XML fragment:
string xmlFragmentStr = "<foo></foo><bar></bar>"; //create a reader settings objects and set the conformance level to fragment XmlReaderSettings xrs = new XmlReaderSettings(); xrs.ConformanceLevel = ConformanceLevel.Fragment; //create a reader using the reader settings XmlReader r = XmlReader.Create(new StringReader(xmlFragmentStr), xrs); r.Read();
Shayne Burgess
Program Manager | Data Programmability
PingBack from http://www.easycoded.com/frequently-asked-questions-on-xml-in-net-part-2/
Very cool - thanks for posting this. I didn't know about the ConformanceLevel.Fragment flag/option and have always in the past wrapped the fragment in an artificial root such as "<root>" + fragment + "</root>" but this is way better.
Thanks. This is the sort of information that is very helpful.
For XSL transforms, I've always tried it and if it fails, wrapped the source in <root> tags (just like Guy). But this, of course, doesn't work if the XML is in file or stream rather than a string.
Is there a corresponding ConformanceLevel property for transforms or would it still work?
Very nice. I've been using XML as a convenient protocol for IPC and was running into an issue where multiple messages would queue up, hence creating a fragment that the reader couldn't handle! This completely solves that :)
Check the Part I and Part II of the Frequently asked questions around XML and .NET integration.
When will we see a new drop of LinqToXSD? I love this module, don't have to think about XML at all, things just work :)