从这里我需要单独获取(用户名)“pelech”,这只是我的 xml 文件中的示例,我有 1000 个用户。
<user>
<login>pelech</login>
<password>passwords are saved outside</password>
</user>
我尝试了以下脚本,但它不起作用。
import xml.etree.ElementTree as ET
tree = ET.parse("users.xml")
root = tree.getroot()
for app in root.findall('user'):
for l in zip(app.iter('login')):
print("%s" % (app.get('login')));
~
答案1
如果您使用的是 Linux 操作系统 - 简单xmlstarlet解决方案:
xmlstarlet sel -t -v "//user/login" -n users.xml
答案2
我使用 beautifulsoup 来实现这一点
如果使用 pip 安装,请按照以下说明操作
pip install bs4
您可以在 python 交互式 shell 中测试它
>>> from bs4 import BeautifulSoup as Soup
>>> content = """<user>
... <login>pelech</login>
... <password>passwords are saved outside</password>
... </user>"""
>>> soup = Soup(content, "html.parser")
>>> soup.find_all("login")
[<login>pelech</login>]
>>> soup.find("login").text
'pelech'
我使用默认的 html.parser。如果您在正确解析它时遇到困难,您可以考虑使用lxml。
为了完整起见,您可以迭代从返回的列表soup.find_all("login")
>>> for login in soup.find_all("login"):
... print(login.text)
...
pelech
或者,Pythonic 方式
>>> usernames = [login.text for login in soup.find_all("login")]
>>> usernames
['pelech']
欲了解更多详情,请参阅https://www.crummy.com/software/BeautifulSoup/bs4/doc/
答案3
我只能假设您的 XML 格式类似于
<users>
<user>
<login>pelech 1</login>
<password>passwords are saved outside</password>
</user>
<user>
<login>pelech 2</login>
<password>passwords are saved outside</password>
</user>
您需要首先找到您的登录标签,然后您需要在循环内迭代时抓取该标签的文本。
import xml.etree.ElementTree as ET
tree = ET.parse("users.xml")
root = tree.getroot()
for app in root.findall('user'):
for l in app.findall('login'):
print("%s" % (l.text));
以此 XML 为例,这对我来说效果很好。