从在线XML获取价值

时间:2018-11-06 13:05:54

标签: python python-3.x vim ultisnips

我想从这里获取“最新”版本标签的值:https://papermc.io/repo/repository/maven-public/com/destroystokyo/paper/paper-api/maven-metadata.xml

我尝试使用此python:

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 :(得分:0)

我不知道这是否可以解决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