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:
200
Ok
180523_YM_054fd7d84fd4ea7aed237f87289e0c7c
dfc65d98de13c4770e528ef5b65e9629a52595e9
//www.webpagetest.org/jsonResult.php?test=180523_YM_054fd7d84fd4ea7aed237f87289e0c7c
Lỗi sau được tạo ra:
Traceback [most recent call last]:
File "/pagePerformance.py", line 52, in
testId = XML [xmltxt].find["testId"].text
AttributeError: 'NoneType' object has no attribute 'text'
Ganjaam
7652 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 = ' 200 Ok 180523_YM_054fd7d84fd4ea7aed237f87289e0c7c dfc65d98de13c4770e528ef5b65e9629a52595e9 //www.webpagetest.org/jsonResult.php?test=180523_YM_054fd7d84fd4ea7aed237f87289e0c7c '
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 = ' 200 Ok 180523_YM_054fd7d84fd4ea7aed237f87289e0c7c dfc65d98de13c4770e528ef5b65e9629a52595e9 //www.webpagetest.org/jsonResult.php?test=180523_YM_054fd7d84fd4ea7aed237f87289e0c7c '
>>> 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