Hướng dẫn parse xml response python - phân tích cú pháp Python phản hồi xml

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("http://www.webpagetest.org/testStatus.php?f=xml&test=" + testId )

Phản hồi XML:

Hướng dẫn parse xml response python - phân tích cú pháp Python phản hồi xml



    200
    Ok
    
        180523_YM_054fd7d84fd4ea7aed237f87289e0c7c
        dfc65d98de13c4770e528ef5b65e9629a52595e9
        http://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'

Hướng dẫn parse xml response python - phân tích cú pháp Python phản hồi xml

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

Hướng dẫn parse xml response python - phân tích cú pháp Python phản hồi xml

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 http://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

Hướng dẫn parse xml response python - phân tích cú pháp Python phản hồi xml

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.

https://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 http://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

Hướng dẫn parse xml response python - phân tích cú pháp Python phản hồi xml

nmctwispnmctwispnmctwisp

1671 Huy hiệu bạc4 Huy hiệu đồng1 silver badge4 bronze badges

0