Как объединить два XML-файла с разными дочерними элементами в один XML-файл

Ниже приведены мои примеры xml-файлов.

(XML 1) `

<?xml version="1.0" encoding="utf-8"?>
<objects>
   <object>
      <record>
         <organization>1010</organization>
         <code>000010001</code>
         <name>A &amp; 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 &amp; 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>
Вернуться на верх