如何使用 python 或 perl 等获取 xml 中的特定字符串

如何使用 python 或 perl 等获取 xml 中的特定字符串

从这里我需要单独获取(用户名)“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 为例,这对我来说效果很好。

答案4

使用 lxml 模块

<user>
    <login>pelech</login>
    <password>passwords are saved outside</password>
</user>

以下代码将从 xml 中提取 pelech

from lxml import etree

document = etree.parse(open("users.xml"))
user = etree.xpath("//login")[0].text    #user will have value pelech

学习更多关于路径lxml

相关内容