Python XML - Создать новый файл с заголовком и дочерним классом из файлов - PullRequest
0 голосов
/ 25 февраля 2020

Текущий Python Код:

import xml.etree.ElementTree as ET
from xml.dom import minidom

def sortchildrenby(parent, attr):
    parent[:] = sorted(parent, key=lambda child: child.get(attr))

# Declaration of XML Doc
tree = ET.parse('testfile.xml')
mainEntry = ET.parse('heading.xml')
rootEntry = mainEntry.getroot()
root = tree.getroot()

# Declaration of Parents / Children
sortchildrenby(root, 'mainsite')

def fileCreation():

    for x in root:
        print(x.tag, x.attrib)
        print('\n')
        for rE in rootEntry:
            print(rE.tag, rE.attrib)

fileCreation()

Текущий XML Листы;

XML Требуется курс:

<?xml version="1.0"?>
<settings>
<filename>guide.xml</filename>
<postprocess grab="y" run="n">test</postprocess>
<postprocess run="y" grab="n">test</postprocess>
<user-agent>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0</user-agent>
<logging>test</logging>
<skip>noskip</skip>
<retry>5</retry>
<timespan>5</timespan>
<update>f</update>
<decryptkey site="testsite.com">E0$$#</decryptkey>

XML Строка после заголовка:

<channel   site="testsite.com" site_id="ts3" xmltv_id="9999.testsite.com">#0 HD</channel>
</settings>

XML Файл со строками, добавляемыми в файл:

<mainsite   site="testsite.com" site_id="3848" xmltv_id="3848.testsite.com">Sony Channel</mainsite>
<mainsite   site="testsite.com" site_id="0983" xmltv_id="0983.testsite.com">Sony Channel</mainsite>
<mainsite   site="testsite.com" site_id="3485" xmltv_id="3485.testsite.com">Sony Channel</mainsite>
<mainsite   site="testsite.com" site_id="9029" xmltv_id="9029.testsite.com">Sony Channel</mainsite>
<mainsite   site="testsite.com" site_id="4837" xmltv_id="4837.testsite.com">Sony Channel</mainsite>
<mainsite   site="testsite.com" site_id="1273" xmltv_id="1273.testsite.com">Sony Channel</mainsite>
<mainsite   site="testsite.com" site_id="9483" xmltv_id="9483.testsite.com">Sony Channel</mainsite>

В основном то, что я пытаюсь do - вывод, который я получаю на терминале, отлично показывает, как я хочу, чтобы это выводилось, но я не могу заставить его выводить таким же образом в фактический xml файл. Я хочу отделить каждый «основной сайт» от заголовка, чтобы я мог выполнить каждый файл в другой программе.

ПРИМЕР:

('filename', {})
('postprocess', {'grab': 'y', 'run': 'n'})
('postprocess', {'grab': 'n', 'run': 'y'})
('user-agent', {})
('logging', {})
('skip', {})
('retry', {})
('timespan', {})
('update', {})
('decryptkey', {'site': 'testsite.com'})
('mainsite', {'xmltv_id': '2929.testsite.com', 'site_id': '2929', 'site': 'mainsite'})

TIA

...