Se você está no sistema operacional Linux - simples xmlstarlet :
xmlstarlet sel -t -v "//user/login" -n users.xml
daqui eu preciso obter (nome de usuário) "pelech" sozinho este é apenas um exemplo no meu arquivo xml eu tenho 1000 usuários.
<user>
<login>pelech</login>
<password>passwords are saved outside</password>
</user>
Eu tentei seguir o script, mas não funciona.
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')));
~
Se você está no sistema operacional Linux - simples xmlstarlet :
xmlstarlet sel -t -v "//user/login" -n users.xml
Só posso supor que seu XML esteja formatado de maneira semelhante a
<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>
Você precisa encontrar sua tag de login primeiro e, em seguida, precisa pegar o texto dessa tag enquanto itera dentro do loop.
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));
Usando esse XML como exemplo, isso funciona bem para mim.
Eu uso o beautifulsoup para conseguir isso
Se você instalar usando pip, siga as seguintes instruções
pip install bs4
Você pode testá-lo no shell interativo do 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'
Eu uso o padrão html.parser. Se você tiver dificuldades em analisá-lo corretamente, considere o uso de lxml.
Por razões de integralidade, você pode apenas percorrer a lista retornada de soup.find_all("login")
>>> for login in soup.find_all("login"):
... print(login.text)
...
pelech
Alternativamente, a maneira pythonic
>>> usernames = [login.text for login in soup.find_all("login")]
>>> usernames
['pelech']
Para mais detalhes, consulte o link
Se o seu arquivo tiver a garantia de estar nesse formato com o nome de login dentro das tags em uma linha separada, você não precisa de bibliotecas xml e pode fazer uma simples
sed -n 's_ *</*login>__gp' your.xml
Isso remove as tags e espaços iniciais dessa linha e imprime os restos (o nome do usuário!), enquanto todas as outras linhas são suprimidas pela opção -n
.
use o módulo lxml
<user>
<login>pelech</login>
<password>passwords are saved outside</password>
</user>
O código a seguir extrairá o pelech do xml
from lxml import etree
document = etree.parse(open("users.xml"))
user = etree.xpath("//login")[0].text #user will have value pelech