#-----------------------------------------------------------------------
#                                            Prof. Dr. Walmes M. Zeviani
#                                leg.ufpr.br/~walmes · github.com/walmes
#                                        walmes@ufpr.br · @walmeszeviani
#                      Laboratory of Statistics and Geoinformation (LEG)
#                Department of Statistics · Federal University of Paraná
#                                       2019-abr-21 · Curitiba/PR/Brazil
#-----------------------------------------------------------------------

#-----------------------------------------------------------------------
# Carrega os módulos.

import os
os.getcwd()

# Instalar com `anaconda3/bin/pip install requests`
import requests as rqst
import webbrowser as wb

# Para consultar métodos a atributos de um objeto/classe.
from see import see

# Para usar a lxml para parse e XPath.
from lxml import etree

# lxml - XML and HTML with Python
#
# `lxml` is the most feature-rich and easy-to-use library for processing
# XML and HTML in the Python language.

# Documentação da lxml.
wb.open("https://lxml.de/")

#-----------------------------------------------------------------------
# Importação e exame de arquivo XML.

# Arquivo XML com catálogo botânico.
url = "http://www.w3schools.com/Xml/plant_catalog.xml"
wb.open(url)

r = rqst.get(url)
r.status_code
print(r.text)

# Parse.
tree = etree.fromstring(r.content)
type(tree)
len(tree)
see(tree)

# NOTE: ficou em maiúsculo.
tree.tag
tree.xpath('//PLANT/COMMON/text()')
tree.xpath('//PLANT/PRICE/text()')

tree.xpath('//PLANT[1]/COMMON/text()')
tree.xpath('//PLANT[1]/PRICE/text()')

plants = tree.xpath('//PLANT')
type(plants)
len(plants)

type(plants[0])
len(plants[0])

# Formas de dar o caminho na expressão XPath.
plants[0].xpath('COMMON/text()')
plants[0].xpath('./COMMON/text()')

# Para iterar sobre elementos.
for i in tree.iter("PLANT"):
    print(i.xpath("./COMMON/text()"))

# Para iterar sobre elementos com compreensão de lista.
[x.xpath('./COMMON/text()') for x in plants]

# Para iterar sobre elementos com compreensão de lista.
[[x.xpath('./' + xp + '/text()')[0]
  for xp in ["COMMON", "PRICE"]]
 for x in plants]

#-----------------------------------------------------------------------
