如何从C#中的行号和列号中查找XML节点?

时间:2012-02-10 10:14:54

标签: c# xml linq-to-xml

鉴于以下内容

  • 行号
  • 列号
  • XML文件

(行号和列号代表节点的'<'字符)

使用XDocument API如何在该位置找到XNode。

2 个答案:

答案 0 :(得分:3)

你可以这样做:

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 :(得分:1)

请参阅LINQ上的LINQ to XML and Line Numbers使用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);
}