3
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi đang nhận được phản hồi XML từ cuộc gọi API.
Tôi cần giá trị thuộc tính "TestID" từ phản hồi này. Xin hãy giúp tôi về điều này.
r = requests.get( myconfig.URL_webpagetest + "?url=" + testurl + "&f=xml&k=" + myconfig.apikey_webpagetest ) xmltxt = r.content print(xmltxt) testId = XML(xmltxt).find("testId").text r = requests.get("//www.webpagetest.org/testStatus.php?f=xml&test=" + testId )Phản hồi XML:
Lỗi sau được tạo ra:
Traceback (most recent call last): File "/pagePerformance.py", line 52, in <module> testId = XML (xmltxt).find("testId").text AttributeError: 'NoneType' object has no attribute 'text'
Ganjaam
7852 Huy hiệu vàng11 Huy hiệu bạc25 Huy hiệu Đồng2 gold badges11 silver badges25 bronze badges
Đã hỏi ngày 23 tháng 5 năm 2018 lúc 7:15May 23, 2018 at 7:15
3
Sử dụng các mục sau để thu thập TestID từ phản hồi:-
import xml.etree.ElementTree as ET response_xml_as_string = "xml response string from API" responseXml = ET.fromstring(response_xml_as_string) testId = responseXml.find('data').find('testId') print testId.textĐã trả lời ngày 23 tháng 5 năm 2018 lúc 7:47May 23, 2018 at 7:47
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>//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
Bằng cách này, bạn có thể tìm kiếm bất kỳ phần tử nào trong XML từ phần tử gốc/cha mẹ thông qua XPath.
Lưu ý bên: Tôi không đặc biệt như sử dụng phương thức POP để xóa mục khỏi một danh sách mục. Vì vậy, nếu bất cứ ai khác có một cách tốt hơn để làm điều đó xin vui lòng cho tôi biết. Cho đến nay tôi đã xem xét:
1) elm = next (iter (answer.xpath ('/phản hồi/dữ liệu/testid')))))
2) Đơn giản chỉ cần để nó trong danh sách để nó có thể sử dụng làm Stararg
Đã trả lời ngày 25 tháng 9 năm 2018 lúc 21:34Sep 25, 2018 at 21:34
nmctwispnmctwispnmctwisp
1671 Huy hiệu bạc4 Huy hiệu đồng1 silver badge4 bronze badges
Tôi đã tìm thấy bài viết này vào một ngày khác khi nó xuất hiện trên nguồn cấp dữ liệu của tôi, và nó có thể phù hợp với nhu cầu của bạn. Tôi đã lướt qua nó, nhưng nói chung, gói phân tích dữ liệu XML và chuyển đổi các thẻ/thuộc tính/giá trị thành một từ điển. Ngoài ra, tác giả chỉ ra rằng nó cũng duy trì cấu trúc làm tổ của XML.
//www.oreilly.com/learning/jxmlease-python-xml-conversion-data-structures
cho trường hợp sử dụng của bạn.
>>> xml = '<?xml version="1.0" encoding="UTF-8"?> <response> <statusCode>200</statusCode> <statusText>Ok</statusText> <data> <testId>180523_YM_054fd7d84fd4ea7aed237f87289e0c7c</testId> <ownerKey>dfc65d98de13c4770e528ef5b65e9629a52595e9</ownerKey> <jsonUrl>//www.webpagetest.org/jsonResult.php?test=180523_YM_054fd7d84fd4ea7aed237f87289e0c7c</jsonUrl> </data> </response>' >>> root = jxmlease.parse(xml) >>> testid = root['response']['data']['testId'].get_cdata() >>> print(testid) >>> '180523_YM_054fd7d84fd4ea7aed237f87289e0c7c'Đã trả lời ngày 25 tháng 9 năm 2018 lúc 22:07Sep 25, 2018 at 22:07
nmctwispnmctwispnmctwisp
1671 Huy hiệu bạc4 Huy hiệu đồng1 silver badge4 bronze badges
0