Как найти узел XML по номеру строки и столбца в C #? - PullRequest
4 голосов
/ 10 февраля 2012

Учитывая следующее

  • Номер строки
  • Номер столбца
  • XML-файл

(где номер строки и столбца представляет символ «

Используя API XDocument, как мне найти XNode в этой позиции.

Ответы [ 2 ]

3 голосов
/ 11 февраля 2012

Вы можете сделать что-то подобное:

XNode FindNode(string path, int line, int column)
{
    XDocument doc = XDocument.Load(path, LoadOptions.SetLineInfo);
    var query =
        from node in doc.DescendantNodes()
        let lineInfo = (IXmlLineInfo)node
        where lineInfo.LineNumber == line
        && lineInfo.LinePosition <= column
        select node;
    return query.LastOrDefault();
}
1 голос
/ 11 февраля 2012

См. LINQ to XML и номера строк на LINQ Exchange приводит пример использования IXmlLineInfo , который соответствует тому, что вы ищете:

XDocument xml = XDocument.Load(fileName, LoadOptions.SetLineInfo);
var line = from x in xml.Descendants()
           let lineInfo = (IXmlLineInfo)x
           where lineInfo.LineNumber == 21
           select x;

foreach (var item in line)
{
    Console.WriteLine(item);
}
...