Если вам не нужно классифицировать по регионам, вы можете использовать метод findall
или iterfind
, чтобы найти все подходящие подэлементы:
<products_availability date="2020-01-24 06:32" >
<region id="122">
<products count="45453242">
<product id="1000001">0</product>
<product id="1000002">5</product>
<product id="1000003">3</product>
</products>
</region>
<region id="133">
<products count="45453242">
<product id="1000004">7</product>
<product id="1000005">3</product>
<product id="1000006">1</product>
</products>
</region>
</products_availability>
import pandas as pd
import xml.etree.ElementTree as et
columns = ["product", "products_availability"]
xtree = et.parse("file.xml")
products = ((p.get("id"), p.text) for p in xtree.iterfind(".//product"))
out_df = pd.DataFrame(products, columns=columns)
>>> out_df
product products_availability
0 1000001 0
1 1000002 5
2 1000003 3
3 1000004 7
4 1000005 3
5 1000006 1
Издание
Если необходим регион, просто:
import pandas as pd
import xml.etree.ElementTree as et
columns = ["product", "products_availability", "region"]
xtree = et.parse("file.xml")
prds = ((p.get("id"), p.text, r.get("id")) for r in xtree.iterfind(".//region")
for p in r.iterfind(".//product")
)
out_df = pd.DataFrame(prds, columns=columns)
>>> out_df
product products_availability region
0 1000001 0 122
1 1000002 5 122
2 1000003 3 122
3 1000004 7 133
4 1000005 3 133
5 1000006 1 133