Распечатать xml узел python xtree - PullRequest
1 голос
/ 10 октября 2019

Для этого xml

http://dev.virtualearth.net/REST/v1/Locations?q=St%20Mard,%20FR&o=xml&key={BingMapsKey}

Я пытаюсь напечатать Имя для каждого Местоположения

import requests
import xml.etree.ElementTree as ET

url = 'http://dev.virtualearth.net/REST/v1/Locations?q=St%20Mard,%20FR&o=xml&key={BingMapsKey}'

response = requests.get(url)
with open('loc.xml', 'wb') as file:
    file.write(response.content)

mytree = ET.parse('/Users/xxxxxxx/Desktop/pscripts/loc.xml')

name = mytree.findall('Name')

for n in name:

    n = name.text
    print (n)

1 Ответ

1 голос
/ 11 октября 2019
import requests
import xml.etree.ElementTree as ET

url = 'http://dev.virtualearth.net/REST/v1/Locations?q=St%20Mard,%20FR&o=xml&key={BingMapsKey}  '

response = requests.get(url).content.decode("utf-8-sig")

mytree = ET.fromstring(response)

name = mytree.findall('.//{http://schemas.microsoft.com/search/local/ws/rest/v1}Name')

for n in name:
    print (n.text)

Не думаю, что вам нужно сначала написать файл перед его разбором? Мое решение показывает одно возможное решение, и я уверен, что их много.

Краткое объяснение: часть декодирования делает двоичную "строку" строкой, которая может использоваться ET. В части findall я должен был включить "."чтобы поиск начинался с корневого элемента, а «//» включает в себя все относительные узлы на всех глубинах. Кроме того, должно быть включено пространство имен по умолчанию. Надеюсь, это поможет.

...