Получить значение из онлайн XML - PullRequest
0 голосов
/ 06 ноября 2018

Я хочу получить значение тега 'последней' версии здесь: https://papermc.io/repo/repository/maven-public/com/destroystokyo/paper/paper-api/maven-metadata.xml

Я пытался использовать этот питон:

import urllib.request
from xml.etree import ElementTree

opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]

data = opener.open('https://papermc.io/repo/repository/maven-public/com/destroystokyo/paper/paper-api/maven-metadata.xml').

root = ElementTree.fromstring(data)

versioning = root.find("versioning")
latest = versioning.find("latest")
snip.rv = latest.text

Проблема в том, что использование этого внутри vim (я пытаюсь сделать из него фрагменты UltiSnips) делает весь vim чрезвычайно медленным после , когда код завершил работу.

Что вызывает замедление работы моей программы, когда я добавляю этот код ^^?

1 Ответ

0 голосов
/ 16 декабря 2018

Не знаю, решит ли это проблему с производительностью в vim, но код не запускался для меня из-за ошибок в нем.

opener.open возвращает файл-подобный объект, поэтому вы должны прочитать его, используя ElementTree.parse вместо ElementTree.fromstring (на самом деле после opener.open(...) есть конечная точка, поэтому я не знаю, пропустили ли вы после этого read(). В этом случае возвращаемое значение действительно является строкой).

Кроме того, вы можете попытаться закрыть opener, чтобы посмотреть, освобождает ли это некоторые ресурсы (или использовать with).

Прилагаю пример улучшенного кода:

import urllib.request
from xml.etree import ElementTree

opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]

with opener.open('https://papermc.io/repo/repository/maven-public/com/destroystokyo/paper/paper-api/maven-metadata.xml') as data:
    root = ElementTree.parse(data)
    latest = root.find("./versioning/latest")
    snip.rv = latest.text
...