ここから私は(ユーザー名) "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')));
~
Linux OSを使用している場合-シンプル xmlstarlet ソリューション:
xmlstarlet sel -t -v "//user/login" -n users.xml
私はあなたの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を使用すると、これは私にとってはうまく機能します。
私はこれを達成するために美しいスープを使用します
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/ を参照してください
別の行のタグ内のログイン名を使用してファイルがこの形式であることが保証されている場合は、xmlライブラリは不要であり、簡単に行うことができます
sed -n 's_ *</*login>__gp' your.xml
これにより、その行からタグと先頭のスペースが削除され、残り(ユーザー名!)が出力されますが、他のすべての行は-n
オプションによって抑制されます。