Can't get value of nodes in XML file with Python
Question:
I’m trying get data for all my rows in xml file, but i get data only for one column when use element_name ‘Data’ in other case i have empty list. Please help.
My code:
import pandas as pd
import xml.etree.ElementTree as ET
ns = {'doc': 'urn:schemas-microsoft-com:office:spreadsheet', 'ss': 'urn:schemas-microsoft-com:office:spreadsheet'}
tree = ET.parse('2307.xml')
root = tree.getroot()
def getvalueofnode(node, element_name):
"""Return text of the element with the given name or None."""
element = node.find(f'.//doc:{element_name}', ns)
return element.text if element is not None else ''
def main():
data = []
for i, node in enumerate(root.findall('.//doc:Row', ns)):
if i > 0: # skip header row
data.append({
'Накладная №': getvalueofnode(node, 'Data'),
'Время изготовления замеса': getvalueofnode(node, 'Время изготовления замеса'),
'Опознавание рецепта': getvalueofnode(node, 'Опознавание рецепта')
})
return pd.DataFrame(data)
df = main()
print(df)
My Output:
Накладная № Время изготовления замеса Опознавание рецепта
0 1023972
1 1023972
2 1023972
3 1023972
4 1023973
5 1023973
6 1023974
7 1023975
8 1023975
9 1023975
10 1023975
11 1023975
12 1023975
13 1023975
14 1023976
Part of XML data:
<?xml version="1.0" encoding="UTF-8"?><Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns_ss="urn:schemas-microsoft-com:office:spreadsheet"><DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"><Keywords>Version 1.0</Keywords></DocumentProperties><Styles><Style ss_ID="s22"><NumberFormat ss_Format="General Date"/></Style><Style ss_ID="s63"><Alignment ss_Vertical="Bottom" ss_Rotate="90"/></Style></Styles><Worksheet ss_Name="Порционный режим"><Table><Row ss_Index="1"><Cell ss_Index="1" ss_StyleID="s63"><Data ss_Type="String">Накладная №</Data></Cell><Cell ss_Index="2" ss_StyleID="s63"><Data ss_Type="String">Время изготовления замеса</Data></Cell><Cell ss_Index="3" ss_StyleID="s63"><Data ss_Type="String">Опознавание рецепта</Data></Cell><Cell ss_Index="4" ss_StyleID="s63"><Data ss_Type="String">Имя рецепта</Data></Cell><Cell ss_Index="5" ss_StyleID="s63"><Data ss_Type="String">Категория рецепта</Data></Cell><Cell ss_Index="6" ss_StyleID="s63"><Data ss_Type="String">Номер замеса</Data></Cell><Cell ss_Index="7" ss_StyleID="s63"><Data ss_Type="String">Бункер отгрузки</Data></Cell><Cell ss_Index="8" ss_StyleID="s63"><Data ss_Type="String">Время смешивания</Data></Cell><Cell ss_Index="9" ss_StyleID="s63"><Data ss_Type="String">Кол-во продукции</Data></Cell><Cell ss_Index="10" ss_StyleID="s63"><Data ss_Type="String">Рецепт изменён</Data></Cell><Cell ss_Index="11" ss_StyleID="s63"><Data ss_Type="String">Взятие пробы</Data></Cell><Cell ss_Index="12" ss_StyleID="s63"><Data ss_Type="String">Пенный битум</Data></Cell><Cell ss_Index="13" ss_StyleID="s63"><Data ss_Type="String">Температура смеси Надо</Data></Cell><Cell ss_Index="14" ss_StyleID="s63"><Data ss_Type="String">Температура смеси Надо единица</Data></Cell><Cell ss_Index="15" ss_StyleID="s63"><Data ss_Type="String">Температура смеси Есть</Data></Cell><Cell ss_Index="16" ss_StyleID="s63"><Data ss_Type="String">Температура смеси Есть единица</Data></Cell><Cell ss_Index="17" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="18" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="19" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="20" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="21" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="22" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="23" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="24" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="25" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="26" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Дозацию продолжить</Data></Cell><Cell ss_Index="27" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="28" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Температура компонента</Data></Cell><Cell ss_Index="29" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Температура компонента единица</Data></Cell><Cell ss_Index="30" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="31" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="32" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="33" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="34" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="35" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="36" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="37" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="38" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="39" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Дозацию продолжить</Data></Cell><Cell ss_Index="40" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="41" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Температура компонента</Data></Cell><Cell ss_Index="42" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Температура компонента единица</Data></Cell><Cell ss_Index="43" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="44" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="45" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="46" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="47" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="48" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="49" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="50" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="51" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="52" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Дозацию продолжить</Data></Cell><Cell ss_Index="53" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="54" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Температура компонента</Data></Cell><Cell ss_Index="55" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Температура компонента единица</Data></Cell><Cell ss_Index="56" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="57" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="58" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="59" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="60" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="61" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="62" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="63" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="64" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="65" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Дозацию продолжить</Data></Cell><Cell ss_Index="66" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="67" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Температура компонента</Data></Cell><Cell ss_Index="68" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Температура компонента единица</Data></Cell><Cell ss_Index="69" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="70" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="71" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="72" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="73" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="74" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="75" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="76" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="77" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="78" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Дозацию продолжить</Data></Cell><Cell ss_Index="79" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="80" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Температура компонента</Data></Cell><Cell ss_Index="81" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Температура компонента единица</Data></Cell><Cell ss_Index="82" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="83" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="84" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="85" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="86" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="87" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="88" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="89" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="90" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="91" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Дозацию продолжить</Data></Cell><Cell ss_Index="92" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="93" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Температура компонента</Data></Cell><Cell ss_Index="94" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Температура компонента единица</Data></Cell><Cell ss_Index="95" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="96" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="97" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="98" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="99" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="100" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="101" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="102" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="103" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="104" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Дозацию продолжить</Data></Cell><Cell ss_Index="105" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="106" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Температура компонента</Data></Cell><Cell ss_Index="107" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Температура компонента единица</Data></Cell><Cell ss_Index="108" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="109" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="110" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="111" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="112" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="113" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="114" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="115" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="116" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="117" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Дозацию продолжить</Data></Cell><Cell ss_Index="118" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="119" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Температура компонента</Data></Cell><Cell ss_Index="120" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Температура компонента единица</Data></Cell><Cell ss_Index="121" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="122" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="123" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="124" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="125" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="126" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="127" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="128" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="129" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="130" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Дозацию продолжить</Data></Cell><Cell ss_Index="131" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="132" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Температура компонента</Data></Cell><Cell ss_Index="133" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Температура компонента единица</Data></Cell></Row><Row ss_Index="2"><Cell ss_Index="1"><Data ss_Type="String">1023972</Data></Cell><Cell ss_Index="2" ss_StyleID="s22"><Data ss_Type="DateTime">2022-07-23T09:06:06.813</Data></Cell><Cell ss_Index="3"><Data ss_Type="String">В-10.</Data></Cell><Cell ss_Index="4"><Data ss_Type="String">В-10.</Data></Cell><Cell ss_Index="6"><Data ss_Type="Number">1</Data></Cell><Cell ss_Index="7"><Data ss_Type="String">1. Silo</Data></Cell><Cell ss_Index="8"><Data ss_Type="Number">30</Data></Cell><Cell ss_Index="9"><Data ss_Type="Number">3.02739</Data></Cell><Cell ss_Index="10"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="11"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="12"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="13"><Data ss_Type="Number">50</Data></Cell><Cell ss_Index="14"><Data ss_Type="String">°C</Data></Cell><Cell ss_Index="15"><Data ss_Type="Number">161.105</Data></Cell><Cell ss_Index="16"><Data ss_Type="String">°C</Data></Cell><Cell ss_Index="17"><Data ss_Type="Number">189.1</Data></Cell><Cell ss_Index="18"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="19"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="20"><Data ss_Type="Number">187.599</Data></Cell><Cell ss_Index="21"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="22"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="23"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="24"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="25"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="26"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="27"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="28"><Data ss_Type="Number">160.852</Data></Cell><Cell ss_Index="29"><Data ss_Type="String">°C</Data></Cell><Cell ss_Index="30"><Data ss_Type="Number">91.5</Data></Cell><Cell ss_Index="31"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="32"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="33"><Data ss_Type="Number">86.3552</Data></Cell><Cell ss_Index="34"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="35"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="36"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="37"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="38"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="39"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="40"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="43"><Data ss_Type="Number">91.5</Data></Cell><Cell ss_Index="44"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="45"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="46"><Data ss_Type="Number">89.5425</Data></Cell><Cell ss_Index="47"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="48"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="49"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="50"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="51"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="52"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="53"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="69"><Data ss_Type="Number">1811.7</Data></Cell><Cell ss_Index="70"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="71"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="72"><Data ss_Type="Number">1791.45</Data></Cell><Cell ss_Index="73"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="74"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="75"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="76"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="77"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="78"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="79"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="80"><Data ss_Type="Number">65.955</Data></Cell><Cell ss_Index="81"><Data ss_Type="String">°C</Data></Cell><Cell ss_Index="82"><Data ss_Type="Number">866.2</Data></Cell><Cell ss_Index="83"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="84"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="85"><Data ss_Type="Number">872.447</Data></Cell><Cell ss_Index="86"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="87"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="88"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="89"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="90"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="91"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="92"><Data ss_Type="Number">0</Data></Cell></Row></Table></Worksheet></Workbook>
Answers:
If you use read_xml() from pandas with the path like:
import pandas as ET
df = pd.read_xml(xml, xpath=(".//ns0:Cell"), namespaces={"ns0":"urn:schemas-microsoft-com:office:spreadsheet"})
print(df)
Gives you this output:
Index StyleID Data
0 1 s63 Накладная №
1 2 s63 Время изготовления замеса
2 3 s63 Опознавание рецепта
3 4 s63 Имя рецепта
4 5 s63 Категория рецепта
5 6 s63 Номер замеса
6 7 s63 Бункер отгрузки
7 8 s63 Время смешивания
8 9 s63 Кол-во продукции
9 10 s63 Рецепт изменён
10 11 s63 Взятие пробы
11 12 s63 Пенный битум
12 13 s63 Температура смеси Надо
13 14 s63 Температура смеси Надо единица
14 15 s63 Температура смеси Есть
15 16 s63 Температура смеси Есть единица
16 17 s63 Bit 1 (AB01)@Кол-во компонента Надо
Thanks for trying to help. I found a solution to the task that works for me. In my solution task, I first find the column indexes def find_cell_indexes(xml_file_path, row_index, column_names): that I am interested in in the list (sometimes they may or may not be in the XML file). And finally, def getvalueofnode(node):. Sorry for the russian language in the code, unfortunately it is in the XML file
import xml.etree.ElementTree as ET
import pandas as pd
def find_cell_indexes(xml_file_path, row_index, column_names):
# Parse the XML file and get the root element
tree = ET.parse(xml_file_path)
root = tree.getroot()
# Define the namespaces used in the XML file
ns = {'doc': 'urn:schemas-microsoft-com:office:spreadsheet',
'ss': 'urn:schemas-microsoft-com:office:spreadsheet'}
# Find the row element with the specified index
row_element = root.find(f'.//doc:Row[@ss:Index="{row_index}"]', ns)
if row_element is not None:
# Find the cell elements in the row that correspond to the specified column names
indexes = []
for column_name in column_names:
found_column = False
for cell_element in row_element.findall('.//doc:Cell', ns):
cell_data_element = cell_element.find('.//doc:Data', ns)
if cell_data_element.text == column_name:
cell_items = cell_element.items()
indexes.append(cell_items[0][1])
found_column = True
break
if not found_column:
indexes.append('')
return indexes
# If the row is not found, return an empty list
return []
xml_file_path = '2307.xml'
row_index = 1 # Assuming the header row is the first row
column_names = ['Накладная №', 'Время изготовления замеса', 'Имя рецепта', 'Кол- во продукции',
'Bit 1 (AB01)@Кол-во компонента Есть', 'Bitumen pipe']
cell_indexes = find_cell_indexes(xml_file_path, row_index, column_names)
print(cell_indexes) # Output: [1, 2]
ns = {"doc": "urn:schemas-microsoft-com:office:spreadsheet", "ss": "urn:schemas-microsoft-com:office:spreadsheet"}
tree = ET.parse("2307.xml")
root = tree.getroot()
def getvalueofnode(node):
""" return node text or None """
return node.text if node is not None else ''
def main():
data = []
for i, node in enumerate(root.findall('.//doc:Row', ns)):
if i > 0:
data.append({'doc_num': getvalueofnode(node.find(f'doc:Cell[@ss:Index="{cell_indexes[0]}"]/doc:Data', ns)),
'time_prod': getvalueofnode(
node.find(f'doc:Cell[@ss:Index="{cell_indexes[1]}"]/doc:Data', ns)),
'idr': getvalueofnode(node.find(f'doc:Cell[@ss:Index="{cell_indexes[2]}"]/doc:Data', ns)),
'qtty': getvalueofnode(node.find(f'doc:Cell[@ss:Index="{cell_indexes[3]}"]/doc:Data', ns)),
'bitum': getvalueofnode(node.find(f'doc:Cell[@ss:Index="{cell_indexes[4]}"]/doc:Data', ns)),
'Bitumen pipe': getvalueofnode(
node.find(f'doc:Cell[@ss:Index="{cell_indexes[5]}"]/doc:Data', ns)),
})
return pd.DataFrame(data)
df = main()
print(df)
Result:
[‘1’, ‘2’, ‘4’, ‘9’, ’20’, ”]
doc_num time_prod idr qtty bitum Bitumen pipe
0 1023972 2022-07-23T09:06:06.813 В-10. 3.02739 187.599
1 1023972 2022-07-23T09:06:59.747 В-10. 3.08288 189.614
2 1023972 2022-07-23T09:07:41.120 В-10. 1.93264 119.995
3 1023972 2022-07-23T09:08:20.410 В-10. 1.97369 120.898
4 1023973 2022-07-23T09:09:24.397 В-10. 1.7387 109.418
5 1023973 2022-07-23T09:10:03.280 В-10. 1.7441 110.787
6 1023974 2022-07-23T09:11:40.593 КЗ-10 2.03064 97.3793
7 1023975 2022-07-23T09:12:32.547 В-10. 3.08609 190.498
8 1023975 2022-07-23T09:13:22.643 В-10. 3.06997 190.194
9 1023975 2022-07-23T09:14:21.627 В-10. 3.05432 190.947
10 1023975 2022-07-23T09:15:34.983 В-10. 3.03267 190.264
11 1023975 2022-07-23T09:16:46.077 В-10. 3.03047 191.279
12 1023975 2022-07-23T09:17:30.267 В-10. 2.3624 147.301
13 1023975 2022-07-23T09:18:23.987 В-10. 2.36726 147.873
14 1023976 2022-07-23T09:21:04.580 В-10. 3.05764 190.259
15 1023976 2022-07-23T09:21:49.820 В-10. 3.05276 190.801
16 1023976 2022-07-23T09:22:36.020 В-10. 3.04138 190.861
17 1023976 2022-07-23T09:23:21.063 В-10. 3.04716 190.194
18 1023976 2022-07-23T09:24:09.067 В-10. 3.07738 190.696
19 1023976 2022-07-23T09:25:08.350 В-10. 3.06708 190.381
20 1023976 2022-07-23T09:26:20.810 В-10. 3.05788 190.06
21 1023976 2022-07-23T09:27:25.423 В-10. 3.04395 189.959
22 1023976 2022-07-23T09:28:27.750 В-10. 2.78911 174.02
23 1023976 2022-07-23T09:29:54.223 В-10. 2.78346 173.047
24 1023977 2022-07-23T10:02:13.430 В-10. 3.04915 190.329
25 1023977 2022-07-23T10:02:53.953 В-10. 1.98642 122.926
26 1023977 2022-07-23T10:03:30.620 В-10. 1.96784 122.874
27 1023978 2022-07-23T10:48:47.767 В-10. 3.03407 189.892
28 1023978 2022-07-23T10:49:38.930 В-10. 3.06354 190.861
29 1023978 2022-07-23T10:51:23.293 В-10. 1.94399 122.194
30 1023978 2022-07-23T10:52:00.743 В-10. 1.96193 122.483
31 1023979 2022-07-23T10:54:21.910 В-10. 2.49058 155.521
32 1023979 2022-07-23T10:55:00.860 В-10. 2.50879 155.907
33 1023980 2022-07-23T11:21:05.890 В-10. 2.50959 156.563
34 1023980 2022-07-23T11:24:50.700 В-10. 2.5009 154.343
35 1023981 2022-07-23T11:37:20.167 В-10. 2.5077 156.348
36 1023981 2022-07-23T11:39:35.803 В-10. 2.50112 154.129
I’m trying get data for all my rows in xml file, but i get data only for one column when use element_name ‘Data’ in other case i have empty list. Please help.
My code:
import pandas as pd
import xml.etree.ElementTree as ET
ns = {'doc': 'urn:schemas-microsoft-com:office:spreadsheet', 'ss': 'urn:schemas-microsoft-com:office:spreadsheet'}
tree = ET.parse('2307.xml')
root = tree.getroot()
def getvalueofnode(node, element_name):
"""Return text of the element with the given name or None."""
element = node.find(f'.//doc:{element_name}', ns)
return element.text if element is not None else ''
def main():
data = []
for i, node in enumerate(root.findall('.//doc:Row', ns)):
if i > 0: # skip header row
data.append({
'Накладная №': getvalueofnode(node, 'Data'),
'Время изготовления замеса': getvalueofnode(node, 'Время изготовления замеса'),
'Опознавание рецепта': getvalueofnode(node, 'Опознавание рецепта')
})
return pd.DataFrame(data)
df = main()
print(df)
My Output:
Накладная № Время изготовления замеса Опознавание рецепта
0 1023972
1 1023972
2 1023972
3 1023972
4 1023973
5 1023973
6 1023974
7 1023975
8 1023975
9 1023975
10 1023975
11 1023975
12 1023975
13 1023975
14 1023976
Part of XML data:
<?xml version="1.0" encoding="UTF-8"?><Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns_ss="urn:schemas-microsoft-com:office:spreadsheet"><DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"><Keywords>Version 1.0</Keywords></DocumentProperties><Styles><Style ss_ID="s22"><NumberFormat ss_Format="General Date"/></Style><Style ss_ID="s63"><Alignment ss_Vertical="Bottom" ss_Rotate="90"/></Style></Styles><Worksheet ss_Name="Порционный режим"><Table><Row ss_Index="1"><Cell ss_Index="1" ss_StyleID="s63"><Data ss_Type="String">Накладная №</Data></Cell><Cell ss_Index="2" ss_StyleID="s63"><Data ss_Type="String">Время изготовления замеса</Data></Cell><Cell ss_Index="3" ss_StyleID="s63"><Data ss_Type="String">Опознавание рецепта</Data></Cell><Cell ss_Index="4" ss_StyleID="s63"><Data ss_Type="String">Имя рецепта</Data></Cell><Cell ss_Index="5" ss_StyleID="s63"><Data ss_Type="String">Категория рецепта</Data></Cell><Cell ss_Index="6" ss_StyleID="s63"><Data ss_Type="String">Номер замеса</Data></Cell><Cell ss_Index="7" ss_StyleID="s63"><Data ss_Type="String">Бункер отгрузки</Data></Cell><Cell ss_Index="8" ss_StyleID="s63"><Data ss_Type="String">Время смешивания</Data></Cell><Cell ss_Index="9" ss_StyleID="s63"><Data ss_Type="String">Кол-во продукции</Data></Cell><Cell ss_Index="10" ss_StyleID="s63"><Data ss_Type="String">Рецепт изменён</Data></Cell><Cell ss_Index="11" ss_StyleID="s63"><Data ss_Type="String">Взятие пробы</Data></Cell><Cell ss_Index="12" ss_StyleID="s63"><Data ss_Type="String">Пенный битум</Data></Cell><Cell ss_Index="13" ss_StyleID="s63"><Data ss_Type="String">Температура смеси Надо</Data></Cell><Cell ss_Index="14" ss_StyleID="s63"><Data ss_Type="String">Температура смеси Надо единица</Data></Cell><Cell ss_Index="15" ss_StyleID="s63"><Data ss_Type="String">Температура смеси Есть</Data></Cell><Cell ss_Index="16" ss_StyleID="s63"><Data ss_Type="String">Температура смеси Есть единица</Data></Cell><Cell ss_Index="17" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="18" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="19" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="20" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="21" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="22" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="23" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="24" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="25" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="26" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Дозацию продолжить</Data></Cell><Cell ss_Index="27" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="28" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Температура компонента</Data></Cell><Cell ss_Index="29" ss_StyleID="s63"><Data ss_Type="String">Bit 1 (AB01)@Температура компонента единица</Data></Cell><Cell ss_Index="30" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="31" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="32" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="33" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="34" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="35" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="36" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="37" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="38" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="39" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Дозацию продолжить</Data></Cell><Cell ss_Index="40" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="41" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Температура компонента</Data></Cell><Cell ss_Index="42" ss_StyleID="s63"><Data ss_Type="String">Пыль (AEF01)@Температура компонента единица</Data></Cell><Cell ss_Index="43" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="44" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="45" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="46" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="47" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="48" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="49" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="50" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="51" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="52" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Дозацию продолжить</Data></Cell><Cell ss_Index="53" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="54" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Температура компонента</Data></Cell><Cell ss_Index="55" ss_StyleID="s63"><Data ss_Type="String">Минеральный порошок (AFF01)@Температура компонента единица</Data></Cell><Cell ss_Index="56" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="57" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="58" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="59" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="60" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="61" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="62" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="63" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="64" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="65" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Дозацию продолжить</Data></Cell><Cell ss_Index="66" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="67" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Температура компонента</Data></Cell><Cell ss_Index="68" ss_StyleID="s63"><Data ss_Type="String">Bypass (AM01)@Температура компонента единица</Data></Cell><Cell ss_Index="69" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="70" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="71" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="72" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="73" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="74" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="75" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="76" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="77" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="78" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Дозацию продолжить</Data></Cell><Cell ss_Index="79" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="80" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Температура компонента</Data></Cell><Cell ss_Index="81" ss_StyleID="s63"><Data ss_Type="String">0-5 (AM02)@Температура компонента единица</Data></Cell><Cell ss_Index="82" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="83" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="84" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="85" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="86" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="87" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="88" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="89" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="90" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="91" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Дозацию продолжить</Data></Cell><Cell ss_Index="92" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="93" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Температура компонента</Data></Cell><Cell ss_Index="94" ss_StyleID="s63"><Data ss_Type="String">5-10 (AM03)@Температура компонента единица</Data></Cell><Cell ss_Index="95" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="96" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="97" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="98" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="99" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="100" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="101" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="102" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="103" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="104" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Дозацию продолжить</Data></Cell><Cell ss_Index="105" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="106" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Температура компонента</Data></Cell><Cell ss_Index="107" ss_StyleID="s63"><Data ss_Type="String">10-15 (AM04)@Температура компонента единица</Data></Cell><Cell ss_Index="108" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="109" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="110" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="111" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="112" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="113" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="114" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="115" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="116" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="117" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Дозацию продолжить</Data></Cell><Cell ss_Index="118" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="119" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Температура компонента</Data></Cell><Cell ss_Index="120" ss_StyleID="s63"><Data ss_Type="String">15-20 (AM05)@Температура компонента единица</Data></Cell><Cell ss_Index="121" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Кол-во компонента Надо</Data></Cell><Cell ss_Index="122" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Кол-во компонента Надо единица</Data></Cell><Cell ss_Index="123" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Компоненты без засчёта Надо</Data></Cell><Cell ss_Index="124" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Кол-во компонента Есть</Data></Cell><Cell ss_Index="125" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Кол-во компонента Есть единица</Data></Cell><Cell ss_Index="126" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Компоненты без засчёта Есть</Data></Cell><Cell ss_Index="127" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Ручное вмешательство при работе</Data></Cell><Cell ss_Index="128" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Допуск при дозации акцептирован</Data></Cell><Cell ss_Index="129" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Автоматическая коррекция заданного значения</Data></Cell><Cell ss_Index="130" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Дозацию продолжить</Data></Cell><Cell ss_Index="131" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Синхронизация с последующей фазой</Data></Cell><Cell ss_Index="132" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Температура компонента</Data></Cell><Cell ss_Index="133" ss_StyleID="s63"><Data ss_Type="String">20-40 (AM06)@Температура компонента единица</Data></Cell></Row><Row ss_Index="2"><Cell ss_Index="1"><Data ss_Type="String">1023972</Data></Cell><Cell ss_Index="2" ss_StyleID="s22"><Data ss_Type="DateTime">2022-07-23T09:06:06.813</Data></Cell><Cell ss_Index="3"><Data ss_Type="String">В-10.</Data></Cell><Cell ss_Index="4"><Data ss_Type="String">В-10.</Data></Cell><Cell ss_Index="6"><Data ss_Type="Number">1</Data></Cell><Cell ss_Index="7"><Data ss_Type="String">1. Silo</Data></Cell><Cell ss_Index="8"><Data ss_Type="Number">30</Data></Cell><Cell ss_Index="9"><Data ss_Type="Number">3.02739</Data></Cell><Cell ss_Index="10"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="11"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="12"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="13"><Data ss_Type="Number">50</Data></Cell><Cell ss_Index="14"><Data ss_Type="String">°C</Data></Cell><Cell ss_Index="15"><Data ss_Type="Number">161.105</Data></Cell><Cell ss_Index="16"><Data ss_Type="String">°C</Data></Cell><Cell ss_Index="17"><Data ss_Type="Number">189.1</Data></Cell><Cell ss_Index="18"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="19"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="20"><Data ss_Type="Number">187.599</Data></Cell><Cell ss_Index="21"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="22"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="23"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="24"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="25"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="26"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="27"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="28"><Data ss_Type="Number">160.852</Data></Cell><Cell ss_Index="29"><Data ss_Type="String">°C</Data></Cell><Cell ss_Index="30"><Data ss_Type="Number">91.5</Data></Cell><Cell ss_Index="31"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="32"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="33"><Data ss_Type="Number">86.3552</Data></Cell><Cell ss_Index="34"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="35"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="36"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="37"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="38"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="39"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="40"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="43"><Data ss_Type="Number">91.5</Data></Cell><Cell ss_Index="44"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="45"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="46"><Data ss_Type="Number">89.5425</Data></Cell><Cell ss_Index="47"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="48"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="49"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="50"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="51"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="52"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="53"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="69"><Data ss_Type="Number">1811.7</Data></Cell><Cell ss_Index="70"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="71"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="72"><Data ss_Type="Number">1791.45</Data></Cell><Cell ss_Index="73"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="74"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="75"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="76"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="77"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="78"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="79"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="80"><Data ss_Type="Number">65.955</Data></Cell><Cell ss_Index="81"><Data ss_Type="String">°C</Data></Cell><Cell ss_Index="82"><Data ss_Type="Number">866.2</Data></Cell><Cell ss_Index="83"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="84"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="85"><Data ss_Type="Number">872.447</Data></Cell><Cell ss_Index="86"><Data ss_Type="String">kg</Data></Cell><Cell ss_Index="87"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="88"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="89"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="90"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="91"><Data ss_Type="Number">0</Data></Cell><Cell ss_Index="92"><Data ss_Type="Number">0</Data></Cell></Row></Table></Worksheet></Workbook>
If you use read_xml() from pandas with the path like:
import pandas as ET
df = pd.read_xml(xml, xpath=(".//ns0:Cell"), namespaces={"ns0":"urn:schemas-microsoft-com:office:spreadsheet"})
print(df)
Gives you this output:
Index StyleID Data
0 1 s63 Накладная №
1 2 s63 Время изготовления замеса
2 3 s63 Опознавание рецепта
3 4 s63 Имя рецепта
4 5 s63 Категория рецепта
5 6 s63 Номер замеса
6 7 s63 Бункер отгрузки
7 8 s63 Время смешивания
8 9 s63 Кол-во продукции
9 10 s63 Рецепт изменён
10 11 s63 Взятие пробы
11 12 s63 Пенный битум
12 13 s63 Температура смеси Надо
13 14 s63 Температура смеси Надо единица
14 15 s63 Температура смеси Есть
15 16 s63 Температура смеси Есть единица
16 17 s63 Bit 1 (AB01)@Кол-во компонента Надо
Thanks for trying to help. I found a solution to the task that works for me. In my solution task, I first find the column indexes def find_cell_indexes(xml_file_path, row_index, column_names): that I am interested in in the list (sometimes they may or may not be in the XML file). And finally, def getvalueofnode(node):. Sorry for the russian language in the code, unfortunately it is in the XML file
import xml.etree.ElementTree as ET
import pandas as pd
def find_cell_indexes(xml_file_path, row_index, column_names):
# Parse the XML file and get the root element
tree = ET.parse(xml_file_path)
root = tree.getroot()
# Define the namespaces used in the XML file
ns = {'doc': 'urn:schemas-microsoft-com:office:spreadsheet',
'ss': 'urn:schemas-microsoft-com:office:spreadsheet'}
# Find the row element with the specified index
row_element = root.find(f'.//doc:Row[@ss:Index="{row_index}"]', ns)
if row_element is not None:
# Find the cell elements in the row that correspond to the specified column names
indexes = []
for column_name in column_names:
found_column = False
for cell_element in row_element.findall('.//doc:Cell', ns):
cell_data_element = cell_element.find('.//doc:Data', ns)
if cell_data_element.text == column_name:
cell_items = cell_element.items()
indexes.append(cell_items[0][1])
found_column = True
break
if not found_column:
indexes.append('')
return indexes
# If the row is not found, return an empty list
return []
xml_file_path = '2307.xml'
row_index = 1 # Assuming the header row is the first row
column_names = ['Накладная №', 'Время изготовления замеса', 'Имя рецепта', 'Кол- во продукции',
'Bit 1 (AB01)@Кол-во компонента Есть', 'Bitumen pipe']
cell_indexes = find_cell_indexes(xml_file_path, row_index, column_names)
print(cell_indexes) # Output: [1, 2]
ns = {"doc": "urn:schemas-microsoft-com:office:spreadsheet", "ss": "urn:schemas-microsoft-com:office:spreadsheet"}
tree = ET.parse("2307.xml")
root = tree.getroot()
def getvalueofnode(node):
""" return node text or None """
return node.text if node is not None else ''
def main():
data = []
for i, node in enumerate(root.findall('.//doc:Row', ns)):
if i > 0:
data.append({'doc_num': getvalueofnode(node.find(f'doc:Cell[@ss:Index="{cell_indexes[0]}"]/doc:Data', ns)),
'time_prod': getvalueofnode(
node.find(f'doc:Cell[@ss:Index="{cell_indexes[1]}"]/doc:Data', ns)),
'idr': getvalueofnode(node.find(f'doc:Cell[@ss:Index="{cell_indexes[2]}"]/doc:Data', ns)),
'qtty': getvalueofnode(node.find(f'doc:Cell[@ss:Index="{cell_indexes[3]}"]/doc:Data', ns)),
'bitum': getvalueofnode(node.find(f'doc:Cell[@ss:Index="{cell_indexes[4]}"]/doc:Data', ns)),
'Bitumen pipe': getvalueofnode(
node.find(f'doc:Cell[@ss:Index="{cell_indexes[5]}"]/doc:Data', ns)),
})
return pd.DataFrame(data)
df = main()
print(df)
Result:
[‘1’, ‘2’, ‘4’, ‘9’, ’20’, ”]
doc_num time_prod idr qtty bitum Bitumen pipe
0 1023972 2022-07-23T09:06:06.813 В-10. 3.02739 187.599
1 1023972 2022-07-23T09:06:59.747 В-10. 3.08288 189.614
2 1023972 2022-07-23T09:07:41.120 В-10. 1.93264 119.995
3 1023972 2022-07-23T09:08:20.410 В-10. 1.97369 120.898
4 1023973 2022-07-23T09:09:24.397 В-10. 1.7387 109.418
5 1023973 2022-07-23T09:10:03.280 В-10. 1.7441 110.787
6 1023974 2022-07-23T09:11:40.593 КЗ-10 2.03064 97.3793
7 1023975 2022-07-23T09:12:32.547 В-10. 3.08609 190.498
8 1023975 2022-07-23T09:13:22.643 В-10. 3.06997 190.194
9 1023975 2022-07-23T09:14:21.627 В-10. 3.05432 190.947
10 1023975 2022-07-23T09:15:34.983 В-10. 3.03267 190.264
11 1023975 2022-07-23T09:16:46.077 В-10. 3.03047 191.279
12 1023975 2022-07-23T09:17:30.267 В-10. 2.3624 147.301
13 1023975 2022-07-23T09:18:23.987 В-10. 2.36726 147.873
14 1023976 2022-07-23T09:21:04.580 В-10. 3.05764 190.259
15 1023976 2022-07-23T09:21:49.820 В-10. 3.05276 190.801
16 1023976 2022-07-23T09:22:36.020 В-10. 3.04138 190.861
17 1023976 2022-07-23T09:23:21.063 В-10. 3.04716 190.194
18 1023976 2022-07-23T09:24:09.067 В-10. 3.07738 190.696
19 1023976 2022-07-23T09:25:08.350 В-10. 3.06708 190.381
20 1023976 2022-07-23T09:26:20.810 В-10. 3.05788 190.06
21 1023976 2022-07-23T09:27:25.423 В-10. 3.04395 189.959
22 1023976 2022-07-23T09:28:27.750 В-10. 2.78911 174.02
23 1023976 2022-07-23T09:29:54.223 В-10. 2.78346 173.047
24 1023977 2022-07-23T10:02:13.430 В-10. 3.04915 190.329
25 1023977 2022-07-23T10:02:53.953 В-10. 1.98642 122.926
26 1023977 2022-07-23T10:03:30.620 В-10. 1.96784 122.874
27 1023978 2022-07-23T10:48:47.767 В-10. 3.03407 189.892
28 1023978 2022-07-23T10:49:38.930 В-10. 3.06354 190.861
29 1023978 2022-07-23T10:51:23.293 В-10. 1.94399 122.194
30 1023978 2022-07-23T10:52:00.743 В-10. 1.96193 122.483
31 1023979 2022-07-23T10:54:21.910 В-10. 2.49058 155.521
32 1023979 2022-07-23T10:55:00.860 В-10. 2.50879 155.907
33 1023980 2022-07-23T11:21:05.890 В-10. 2.50959 156.563
34 1023980 2022-07-23T11:24:50.700 В-10. 2.5009 154.343
35 1023981 2022-07-23T11:37:20.167 В-10. 2.5077 156.348
36 1023981 2022-07-23T11:39:35.803 В-10. 2.50112 154.129