Python XML удалить узел перед записью - PullRequest
0 голосов
/ 21 января 2019

У меня проблема с xml и python для удаления узла перед записью xml.

from xml.etree.ElementTree import ElementTree
from xml.etree.ElementTree import Element
from xml.etree.ElementTree import SubElement

import xml.etree.ElementTree as etree

root = Element('p:FatturaElettronica')
Header = SubElement(root, 'FatturaElettronicaHeader')

CedentePrestatore = SubElement(Header, 'CedentePrestatore')

перед записью на диск я хочу удалить элемент CedentePrestatore, который я пробую:

 xv = root.findall('.//CedentePrestatore')
 root.remove(xv)  <------------------ ERROR

Почему? Как я могу удалить узел перед записью изменений на диск?


Полный код:

#!/usr/bin/env python
# -*- coding: cp1252 -*-

#import xlsxwriter
import sys
import os
import datetime
import re
import logging
import ConfigParser
import shutil
#import MySQLdb as mdb
import smtplib
#import xlrd as opx
# xlwt as opw
import unicodedata
import base64

from xml.etree.ElementTree import ElementTree
from xml.etree.ElementTree import Element
from xml.etree.ElementTree import SubElement

import xml.etree.ElementTree as etree


def test():

    etree.register_namespace('ds',"http://www.w3.org/2000/09/xmldsig#") #some name
    etree.register_namespace('p',"http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2") #some name
    etree.register_namespace('xsi',"http://www.w3.org/2001/XMLSchema-instance") #some name
    root = Element('p:FatturaElettronica')
    print "ok"

    root = Element('p:FatturaElettronica')

    Header = SubElement(root, 'FatturaElettronicaHeader')
    DatiTr = SubElement(Header, 'DatiTrasmissione')

    IdTra  = SubElement(DatiTr, 'IdTrasmittente')


    IdPaese = SubElement(IdTra, 'IdPaese')
    IdCodice = SubElement(IdTra, 'IdCodice')
    IdCodice.text = '0000000'
    IdPaese.text = 'IT'


    ProgressivoInvio = SubElement(DatiTr, 'ProgressivoInvio')
    ProgressivoInvio.text = '1'

    FormatoTrasmissione = SubElement(DatiTr, 'FormatoTrasmissione')
    FormatoTrasmissione.text = 'FPR12'

    xc = root.find('.//ProgressivoInvio')
    root.remove(xc)



if __name__ == '__main__':
        reload(sys)
        sys.setdefaultencoding('cp1252')
        test()
...