Можно ли показать только указанную c строку некоторого многострочного содержимого узла? Я анализирую некоторые junit. xml, и я хочу показать последнюю строку error
узла. Так, например, для этих данных:
<testsuite>
<testcase>
<error message="test setup failure">some
lines
of a lenghty
stacktrace
s.shutdown(socket.SHUT_RDWR)
E OSError: [Errno 107] Transport endpoint is not connected</error>
</testcase>
<testcase>
<error message="test setup failure">some
lines
of a lenghty
stacktrace
raise Exception("Connection closed by remote!")
E Exception: Connection closed by remote!</error>
</testcase>
</testsuite>
Я хотел бы показать только
E OSError: [Errno 107] Transport endpoint is not connected
E Exception: Connection closed by remote!
Получение всего текста тривиально либо
/testsuite/testcase/error/text()
//error/text()
I попробовал ниже выражения xpath:
//error/text()[last()]
но они не работают. Я смог добиться того, чего хотел, используя xmlstarlet, вот так:
xmlstarlet sel -t -m "//error" -v "substring-after(., 'E ')" -n
, но мне было интересно, можно ли достичь чего-то подобного с помощью чистого выражения XPath?