如何获取xml标签关闭的行号?

How to get the Line number where the xml tag is closed?

我正在尝试获取 XML 标签的起始行号和结束行号(例如 - XML 代码下方的员工),我能够获取标签的起始行号XML 文件但不是关闭特定标签的行号。

有什么办法可以得到标签关闭的行号吗

我的XML代码文件。

<Employee>
      <Employee_Summary>
       <RID>1</RID>
       <Employee_ID> 78769</Employee_ID>
       <Name> Mohan Singh</Name>
      </Employee_Summary>
</Employee> 
<Employee>
      <Employee_Summary>
       <RID>2</RID>
       <Employee_ID> 78770</Employee_ID>
       <Name> Ramesh</Name>
      </Employee_Summary>
</Employee>

C#代码

foreach (var employee in employees)
{
 // code to get employee tag start Line number
 var elemntStartLine = ((IXmlLineInfo)employee).LineNumber;
 // here is want to get tag end Line number from xml file.
}

此处employees的类型为IEnumerable<XElement>

在反序列化数据上,您与文件结构没有任何关系。您必须以 ascii 格式读取文件并尝试循环执行一些自定义检查的唯一机会(保留开始标记的行号,并查找它们的结束标记...)。

但是由于XML不是必须的,甚至是分行的,所以这是一种非常不可靠的方法。 您可能会问自己,您首先需要这些信息做什么?也许您找到了您的用例的另一种表述方式。

我找到了一个解决方案来获取员工 xml 标签关闭的行号。

foreach (var employee in employees)
{
 // code to get employee tag start Line number
 var elemntStartLine = ((IXmlLineInfo)employee).LineNumber;
 // here i get tag end Line number from xml file.
 var elemntEndLine =GetXelementEndLineNo(employee);
}  

 public int GetXelementEndLineNo(XElement xElement)
       {
                int endLineNo = 0;
                xElement.RemoveAll();
                xElement.Add(string.Empty);
                using (XmlReader xmlReader = xElement.CreateReader())
                {
                    var lineInfo = ((IXmlLineInfo)xmlReader);
                    while (xmlReader.Read())
                    {
                        if (xmlReader.NodeType == XmlNodeType.EndElement && xmlReader.LocalName.ToUpper() == "EMPLOYEE")
                        {
                            endLineNo = lineInfo.LineNumber;
                        }
                    }
                }
                return endLineNo;
       }