#c# #xml #linq
#c# #xml #linq
Вопрос:
Как я могу добраться до последнего узла XML через C #? Я перебираю XML-документ и проверяю условие на соответствие значению, и когда условие выполнено, я хочу достичь последнего узла, чтобы завершить итерацию. Может кто-нибудь помочь, пожалуйста.
Комментарии:
1. Конечно, кто-нибудь может вам помочь при условии, что вы опубликуете свой код.
2. Итак, что же вы пытались сделать, чтобы добиться этого?
3. внутри блока успеха моего условия я хочу переместить курсор на lastnode xml, чтобы на следующей итерации он вышел из цикла.
4. Было бы здорово привести несколько примеров кода. В общем, выход из циклов можно выполнить с помощью инструкции «break;». Получение последнего элемента в коллекции выполняется с помощью «.Last()». Не могу дать вам больше без некоторых примеров кода.
5. показать свой код? Вы используете
XDocument
илиXmlReader
илиXmlWriter
Ответ №1:
Это не очень хороший вопрос, но, если я вас правильно понял, вы хотите завершить цикл, когда будет выполнено какое-то условие?
это делается с помощью break;
for (int i = 1; i <= 100; i )
{
if (i == 5)
{
break;
}
}
В случае, если вы хотите получить последний элемент в коллекции с помощью LINQ, это делается с помощью оператора «.Last()».
Ответ №2:
Вы могли бы использовать цикл foreach и перебирать каждого потомка. Проверьте условие и, если оно выполнено, выйдите из цикла.
Получите последний элемент заранее и сделайте что-нибудь с ним после выхода из цикла.
XDocument xDoc = XDocument.Load("myfile.xml");
if(xDoc == null || xDoc.Root == null)
return;
XElement lastElement = xDoc.Root.Descendants().LastOrDefault();
foreach (XElement element in xDoc.Root.Descendants())
{
if (condition)
{
// your logic
break;
}
}
Конечно, кажется, что я делаю вашу домашнюю работу, но ради того, чтобы этот ответ был действительным (в следующий раз добавьте эту информацию в свой первоначальный вопрос!), Используйте следующее:
XElement current = null;
List<XElement> elements = xDoc.Root.Descendants().ToList();
XElement lastElement = elements.LastOrDefault();
for (int i = 0; i < xDoc.Root.Descendants().Count(); i )
{
current = elements[i];
if (condition)
{
// Set i to the highest available number which causes the loop stop.
i = xDoc.Root.Descendants().Count();
}
}
Комментарии:
1. не могу использовать перерыв. Нужна альтернатива
2. Возможно, вам следовало указать это в своем вопросе. Почему вы не можете использовать break?
3. В какой ситуации вы не можете использовать break? Это вопрос домашнего задания / интервью с произвольно наложенными правилами или есть что-то в структуре вашей программы, которая по какой-то причине налагает это ограничение?
4. Там решение без перерыва. Вы могли бы немного повысить производительность, если бы использовали
Count()
только один раз и сохранили его в переменной перед запуском цикла.5. Я хотел бы получить от них «почему бы не использовать
break
-презентацию».