C #: информация о строке при разборе XML с XmlDocument - PullRequest
7 голосов
/ 12 апреля 2011

Каковы мои варианты синтаксического анализа XML-файла с помощью XmlDocument и при этом в дальнейшем сохраняются сведения о строке для сообщений об ошибках? (кроме того, возможно ли сделать то же самое с десериализацией XML?)

Опции, кажется, включают:

Ответы [ 2 ]

8 голосов
/ 12 апреля 2011

Единственный другой вариант, о котором я знаю, это XDocument.Load(), перегрузки которого принимают LoadOptions.SetLineInfo.Это будет потребляться почти так же, как XmlDocument.

Пример

5 голосов
/ 10 ноября 2015

(расширение ответа от комментария Энди)

Нет встроенного способа сделать это с помощью 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...