(расширение ответа от комментария Энди)
Нет встроенного способа сделать это с помощью XmlDocument
(если вы используете XDocument
, вы можете использовать перегрузку XDocument.Load()
, которая принимает LoadOptions.SetLineInfo
- см. этот вопрос ).
Пока нет встроенного способа, вы можете использовать класс оболочки PositionXmlDocument
отсюда (из проекта SharpDevelop ):
https://github.com/icsharpcode/WpfDesigner/blob/5a994b0ff55b9e8f5c41c4573a4e970406ed2fcd/WpfDesign.XamlDom/Project/PositionXmlDocument.cs
Чтобы использовать его, вам необходимо использовать перегрузку Load
, которая принимает XmlReader
(другие перегрузки Load
перейдут в обычный класс XmlDocument
, который не даст вам информацию о номере строки ). Если вы в настоящее время используете перегрузку XmlDocument.Load
, которая принимает имя файла, вам необходимо изменить код следующим образом:
using (var reader = new XmlTextReader(filename))
{
var doc = new PositionXmlDocument();
doc.Load(reader);
}
Теперь вы должны иметь возможность преобразовать любое XmlNode
из этого документа в PositionXmlElement
, чтобы получить номер строки и столбец:
var node = doc.ChildNodes[1];
var elem = (PositionXmlElement) node;
Console.WriteLine("Line: {0}, Position: {1}", elem.LineNumber, elem.LinePosition);