Hướng dẫn extract data from xml response python - trích xuất dữ liệu từ python phản hồi xml

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:

<?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>

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

Làm thế nào trích xuất dữ liệu cụ thể từ tệp XML trong Python?

Cách thức hoạt động của chúng tôi: Tải tài liệu XML của chúng tôi vào bộ nhớ và xây dựng một đối tượng XML ElementTree. Sau đó, chúng tôi sử dụng phương thức tìm, chuyển trong bộ chọn XPath, cho phép chúng tôi chỉ định yếu tố nào chúng tôi đang cố gắng trích xuất. Nếu phần tử không thể được tìm thấy, không có phần tử nào được trả lại.

Làm thế nào để bạn phân tích một chuỗi XML trong Python?

Có hai cách để phân tích tệp bằng mô -đun 'ElementTree'. Đầu tiên là bằng cách sử dụng hàm parse () và hàm thứ hai là fromString () hàm. Hàm parse () phân tích cú pháp tài liệu XML được cung cấp dưới dạng tệp trong khi đó, từ các phân tích cú pháp XML khi được cung cấp dưới dạng chuỗi i.e trong trích dẫn ba.using the parse() function and the second is fromstring() function. The parse () function parses XML document which is supplied as a file whereas, fromstring parses XML when supplied as a string i.e within triple quotes.

Làm thế nào để bạn truy cập các phần tử XML trong Python?

Để đọc một tệp XML bằng ElementTree, trước tiên, chúng tôi nhập lớp ElementTree được tìm thấy bên trong thư viện XML, dưới tên ET (thông tin chung).Sau đó chuyển tên tệp của tệp XML cho ElementTree.Phương thức Parse (), để cho phép phân tích tệp XML của chúng tôi.Sau đó, nhận được gốc (thẻ cha) của tệp XML của chúng tôi bằng GetRoot ().

Làm cách nào để nhận được phản hồi xà phòng trong Python?

Để thực hiện các yêu cầu SOAP đến điểm cuối API SOAP, hãy sử dụng tiêu đề yêu cầu "Loại nội dung: Ứng dụng/SOAP+XML", cho máy chủ biết rằng thân yêu cầu chứa một phong bì SOAP.Máy chủ thông báo cho máy khách rằng họ đã trả lại một phong bì SOAP với tiêu đề phản hồi "loại nội dung: Ứng dụng/SOAP+XML".use the "Content-Type: application/soap+xml" request header, which tells the server that the request body contains a SOAP envelope. The server informs the client that it has returned a SOAP envelope with a "Content-Type: application/soap+xml" response header.

Chủ đề