from lxml.etree import fromstring
string = '<?xml version="1.0" encoding="UTF-8"?> <response> <statusCode>200</statusCode> <statusText>Ok</statusText> <data><testId>180523_YM_054fd7d84fd4ea7aed237f87289e0c7c</testId> <ownerKey>dfc65d98de13c4770e528ef5b65e9629a52595e9</ownerKey> <jsonUrl>http://www.webpagetest.org/jsonResult.php?test=180523_YM_054fd7d84fd4ea7aed237f87289e0c7c</jsonUrl> </data> </response>'
response = fromstring(string.encode('utf-8'))
elm = response.xpath('/response/data/testId').pop()
testId = elm.text
Таким образом, вы можете искать любой элемент в xml из корневого / родительского элемента через XPATH.
Примечание: Мне не особенно нравится использовать метод pop для удаления элемента.из одного списка элементов.Так что, если у кого-то есть лучший способ сделать это, пожалуйста, дайте мне знать.До сих пор я думал:
1) elm = next (iter (response.xpath ('/ response / data / testId')))
2) просто оставить его в спискетак что его можно использовать как stararg