Я пытаюсь найти способ получить последний экземпляр элемента в ответе XML. XML содержит подробности об ошибках, в которых содержится объект с полными сведениями об ошибках:
<error description="Anything">
<object>
<error description="Actual Error">
<!-- error information in here -->
<errorCode>123</errorCode>
<message>Error message</message>
</error>
</object>
</error>
Мне всегда нужна последняя «ошибка», и я могу получить подробности ошибки из вышеуказанного штрафа с помощью
error.xpath('/error/object/error').item(0).getAttribute('description');
, за которым следуют последующие детали (код, сообщение и т. Д.)
Проблема возникает, если ошибка возникла через несколько обработчиков исключений, поскольку каждый из них добавляет свой собственный элемент ошибки, и в итоге он выглядит так:
<error description="Anything">
<object>
<error description="Something Else">
<object>
<error description = "Actual Error">
<!-- error information in here -->
<errorCode>123</errorCode>
<message>Error message</message>
</error>
</object>
</error>
</object>
</error>
Этот повторяющийся шаблон объектной ошибки может продолжаться более одного раза, в зависимости от того, сколько раз было сгенерировано исключение. Чтобы получить подробности из вышеперечисленного, мне понадобится:
error.xpath('/error/object/error/object/error').item(0).getAttribute('description');
Я бы никогда не ожидал более 2 или 3 повторов, но я не хочу писать неприятный код, чтобы попытаться поймать его на 4 разных уровнях.
Я читал о 'last ()' и пробовал
(//element[@name='error'])[last()]
, но мне кажется, что я неправильно понимаю синтаксис, так как он возвращает undefined.
Есть ли простой способ всегда получить последний (самый глубокий) экземпляр элемента 'error' внутри этого вида повторяющегося дерева XML?
Я только хочу прочитать данные в XML, мне не нужно ничего переводить или изменять.
Большое спасибо!