如何通过行号从XDocument中获取XElement



在C#中是否可以通过让步获得XDocument的XElement行号?

我有任何测试XML,比如:

<Student>
  <Name>Josphine</Name>
</Student>
<Student>
  <Name>Hendrick</Name>
</Student>

我想给出任何像5这样的整数作为参数。5会给我元素<Name>Hendrick</Name>这有可能吗?还是我需要分析整个XDocument by a Reader,并在每个循环中检查行号。

您可以将文件读取到字符串数组

string[] lines = File.ReadAllLines("path/to/file");

然后像lines[4]一样得到你的线路。

或者,您应该更好地查看XPath,因为您的XML文档可能会发生更改。

看看这些例子和教程:XPath示例,选择节点。

如果您的XML格式良好,并且您希望只使用XLinq完成工作,那么下面的代码可能会对您有所帮助:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Parse(@"<Students>
                                                  <Student>
                                                    <Name>Josphine</Name>
                                                  </Student>
                                                  <Student>
                                                    <Name>Hendrick</Name>
                                                  </Student>
                                              </Students>", LoadOptions.SetLineInfo);
            IEnumerable<XElement> descendants = doc.Descendants();
            foreach (XElement ele in descendants)
            {
                string ln_num = (((IXmlLineInfo)ele).HasLineInfo() ? ((IXmlLineInfo)ele).LineNumber.ToString() : "");
                string ln_pos = (((IXmlLineInfo)ele).HasLineInfo() ? ((IXmlLineInfo)ele).LinePosition.ToString() : "");
                Console.WriteLine(string.Format("{0} ({1}): at line no. {2}, position {3}", ele.Name.ToString(), ele.Value.ToString(), ln_num.ToString(), ln_pos.ToString()));
            }
            Console.ReadKey();
        }
    }
}

最新更新