Как объединить два XML-файла с разными дочерними элементами в один XML-файл
Ниже приведены мои примеры xml-файлов.
(XML 1) `
<?xml version="1.0" encoding="utf-8"?>
<objects>
<object>
<record>
<organization>1010</organization>
<code>000010001</code>
<name>A & SOLICITORS</name>
<address_1>NORTH</address_1>
<address_2/>
<city/>
<postcode>NUHMAN 1</postcode>
<state/>
<country>IE</country>
<vat_number/>
<telephone_number>054456849</telephone_number>
<fax_number>01 64964659</fax_number>
<currency>USD</currency>
<start_date>1990-01-01</start_date>
<end_date>2999-12-31</end_date>
<status>ACTIVE</status>
</record>
<record>
<organization>1010</organization>
<code>0000100004</code>
<name>ACCUTRON LTD.</name>
<address_1>RAZIK PARK</address_1>
<address_2/>
<city>LIME</city>
<postcode>V94654X7</postcode>
<state/>
<country>IE</country>
<vat_number>IE6566750H</vat_number>
<telephone_number>353 -61 - 54614</telephone_number>
<fax_number/>
<currency>USD</currency>
<start_date>1990-01-01</start_date>
<end_date>2999-12-31</end_date>
<status>ACTIVE</status>
</record>
`
(XML 2)
`
<?xml version="1.0" encoding="utf-8"?>
<objects>
<record>
<po_number>45670369</po_number>
<po_currency>USD</po_currency>
<po_organization>1010</po_organization>
<code>0000156001</code>
<name>SOFTWAREONE INC</name>
<capture_row_type>NONE</capture_row_type>
<source_system>SAP</source_system>
</record>
<record>
<po_number>45670372</po_number>
<po_currency>USD</po_currency>
<po_organization>1010</po_organization>
<code>0000156001</code>
<name>SOFTWAREONE INC</name>
<capture_row_type>NONE</capture_row_type>
<source_system>SAP</source_system>
</record>
`
Как мы видим, некоторые поля здесь похожи.
Я пытаюсь объединить эти два файла в один xml таким образом, чтобы внутри элемента record были все данные из двух xml. Оба данных в двух файлах расположены не по порядку. Я хочу, чтобы данные с соответствующим "кодом" были сгруппированы вместе в новом XML-файле. Оба файла имеют разное количество полей, а код является одним из общих полей, и я хочу, чтобы он был общим фактором, по которому данные будут сгруппированы вместе.
Использование pandas:
S1.xml
:
<?xml version="1.0" encoding="utf-8"?>
<objects>
<object>
<record>
<organization>1010</organization>
<code>000010001</code>
<name>A & SOLICITORS</name>
<address_1>NORTH</address_1>
<address_2/>
<city/>
<postcode>NUHMAN 1</postcode>
<state/>
<country>IE</country>
<vat_number/>
<telephone_number>054456849</telephone_number>
<fax_number>01 64964659</fax_number>
<currency>USD</currency>
<start_date>1990-01-01</start_date>
<end_date>2999-12-31</end_date>
<status>ACTIVE</status>
</record>
<record>
<organization>1010</organization>
<code>0000100004</code>
<name>ACCUTRON LTD.</name>
<address_1>RAZIK PARK</address_1>
<address_2/>
<city>LIME</city>
<postcode>V94654X7</postcode>
<state/>
<country>IE</country>
<vat_number>IE6566750H</vat_number>
<telephone_number>353 -61 - 54614</telephone_number>
<fax_number/>
<currency>USD</currency>
<start_date>1990-01-01</start_date>
<end_date>2999-12-31</end_date>
<status>ACTIVE</status>
</record>
</object>
</objects>
S2.xml
:
<?xml version="1.0" encoding="utf-8"?>
<objects>
<record>
<po_number>45670369</po_number>
<po_currency>USD</po_currency>
<po_organization>1010</po_organization>
<code>0000156001</code>
<name>SOFTWAREONE INC</name>
<capture_row_type>NONE</capture_row_type>
<source_system>SAP</source_system>
</record>
<record>
<po_number>45670372</po_number>
<po_currency>USD</po_currency>
<po_organization>1010</po_organization>
<code>0000156001</code>
<name>SOFTWAREONE INC</name>
<capture_row_type>NONE</capture_row_type>
<source_system>SAP</source_system>
</record>
</objects>
python code
:
import pandas as pd
df1 = pd.read_xml('S1.xml', xpath="//record")
df2 = pd.read_xml('S2.xml', xpath="//record")
df3 = pd.concat([df1, df2], axis=1).to_xml('S3.xml', index=False, root_name='object', row_name='record')
S3.xml
:
<?xml version='1.0' encoding='utf-8'?>
<object>
<record>
<organization>1010</organization>
<code>156001</code>
<name>SOFTWAREONE INC</name>
<address_1>NORTH</address_1>
<address_2/>
<city/>
<postcode>NUHMAN 1</postcode>
<state/>
<country>IE</country>
<vat_number/>
<telephone_number>054456849</telephone_number>
<fax_number>01 64964659</fax_number>
<currency>USD</currency>
<start_date>1990-01-01</start_date>
<end_date>2999-12-31</end_date>
<status>ACTIVE</status>
<po_number>45670369</po_number>
<po_currency>USD</po_currency>
<po_organization>1010</po_organization>
<capture_row_type>NONE</capture_row_type>
<source_system>SAP</source_system>
</record>
<record>
<organization>1010</organization>
<code>156001</code>
<name>SOFTWAREONE INC</name>
<address_1>RAZIK PARK</address_1>
<address_2/>
<city>LIME</city>
<postcode>V94654X7</postcode>
<state/>
<country>IE</country>
<vat_number>IE6566750H</vat_number>
<telephone_number>353 -61 - 54614</telephone_number>
<fax_number/>
<currency>USD</currency>
<start_date>1990-01-01</start_date>
<end_date>2999-12-31</end_date>
<status>ACTIVE</status>
<po_number>45670372</po_number>
<po_currency>USD</po_currency>
<po_organization>1010</po_organization>
<capture_row_type>NONE</capture_row_type>
<source_system>SAP</source_system>
</record>
</object>