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

관련 정보