C#: Line information when parsing XML with XmlDocument
The only other option I know of is XDocument.Load()
, whose overloads accept LoadOptions.SetLineInfo
. This would be consumed in much the same way as an XmlDocument
.
Example
(Expanding answer from @Andy's comment)
There is no built in way to do this using XmlDocument
(if you are using XDocument
, you can use the XDocument.Load()
overload which accepts LoadOptions.SetLineInfo
- see this question).
While there's no built-in way, you can use the PositionXmlDocument
wrapper class from here (from the SharpDevelop project):
https://github.com/icsharpcode/WpfDesigner/blob/5a994b0ff55b9e8f5c41c4573a4e970406ed2fcd/WpfDesign.XamlDom/Project/PositionXmlDocument.cs
In order to use it, you will need to use the Load
overload that accepts an XmlReader
(the other Load
overloads will go to the regular XmlDocument
class, which will not give you line number information). If you are currently using the XmlDocument.Load
overload that accepts a filename, you will need to change your code as follows:
using (var reader = new XmlTextReader(filename))
{
var doc = new PositionXmlDocument();
doc.Load(reader);
}
Now, you should be able to cast any XmlNode
from this document to a PositionXmlElement
to retrieve line number and column:
var node = doc.ChildNodes[1];
var elem = (PositionXmlElement) node;
Console.WriteLine("Line: {0}, Position: {1}", elem.LineNumber, elem.LinePosition);