Как получить номер строки, где закрывается тег xml? - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь получить начальный и конечный номер строки тега 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>

Ответы [ 2 ]

2 голосов
/ 12 марта 2020

На десериализованных данных вы не имеете никакого отношения к файловой структуре. Единственный шанс, что вам нужно прочитать файл как ascii и попробовать l oop над строками, выполняя некоторые пользовательские проверки (удерживая номер строки для открывающих тегов, и искать их закрывающие ...).

Но поскольку XML не является необходимым намерением или даже разбито на строки, это очень ненадежный подход. Вы можете спросить себя, для чего вам нужна эта информация? Может быть, вы найдете другую формулировку вашего варианта использования.

0 голосов
/ 17 марта 2020

Я нашел решение, чтобы получить номер строки, где закрывается тег сотрудника 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;
       }
...