【问题标题】:get line number for XElement here在此处获取 XElement 的行号
【发布时间】:2011-05-27 03:21:53
【问题描述】:
XDocument xdoc = XDocument.Load(file);
IEnumerable<XElement> categories = xdoc.Descendants("Category");
foreach (XElement category in categories)
{
    //get line number for element here...
}

【问题讨论】:

    标签: c# .net xml linq-to-xml


    【解决方案1】:

    XElement(实际上是XObject)实现了IXmlLineInfo接口,所以可以使用:

    IXmlLineInfo info = category;
    int lineNumber = info.LineNumber;
    

    请注意,线路信息并不总是可用,您需要调用HasLineInfo 方法来检查信息是否可用。使用XDocument.Load加载文档时可以指定LoadOptions.SetLineInfo

    【讨论】:

    • 感谢您提及LoadOptions.SetLineInfo 方法。
    • 感谢提及LoadOptions.SetLineInfo。这让我有点不知所措。
    【解决方案2】:
    XDocument xdoc = XDocument.Load(file, LoadOptions.SetLineInfo);
    IEnumerable<XElement> categories = xdoc.Descendants("Category");
    foreach (XElement category in categories)
    {
        //get line number for element here...
        string lineNumber = ((IXmlLineInfo)category).HasLineInfo() ? ((IXmlLineInfo)category).LineNumber : -1;
    }
    

    【讨论】:

    • IXmlLineInfo.LineNumber 返回 int 而不是 string
    • 就个人而言,从 C# 6 开始,我会写成int lineNo = (category as IXmlLineInfo)?.LineNumber ?? -1;
    • 能否获取到标签结束的行号?
    猜你喜欢
    • 1970-01-01
    • 2012-02-24
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多