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インタラクティブシェルでテストできます。

>>> 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

またはPython方式

>>> 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

関連情報