Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni
Dal richiamo di Enrico Letta alla necessità di completare il mercato unico entro il 2028 alla visione di Nokia sul ruolo dell’IA e delle reti intelligenti, il Nokia Innovation Day 2025 ha intrecciato geopolitica e tecnologia, mostrando a Vimercate come la ricerca italiana contribuisca alle sfide globali delle telecomunicazioni
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
OPPO Reno14 F 5G si propone come smartphone di fascia media con caratteristiche equilibrate. Il device monta processore Qualcomm Snapdragon 6 Gen 1, display AMOLED da 6,57 pollici a 120Hz, tripla fotocamera posteriore con sensore principale da 50MP e generosa batteria da 6000mAh con ricarica rapida a 45W. Si posiziona come alternativa accessibile nella gamma Reno14, proponendo un design curato e tutto quello che serve per un uso senza troppe preoccupazioni.
Destiny Rising: quando un gioco mobile supera il gioco originale
Destiny Rising: quando un gioco mobile supera il gioco originale
Tra il declino di Destiny 2 e la crisi di Bungie, il nuovo titolo mobile sviluppato da NetEase sorprende per profondità e varietà. Rising offre ciò che il live service di Bungie non riesce più a garantire, riportando i giocatori in un universo coerente. Un confronto che mette in luce i limiti tecnici e strategici dello studio di Bellevue
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-09-2008, 13:10   #1
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
[Python] Parsing di un file xml

ciao a tutti,

un'applicazione mi fornisce in output un file (ad esempio chiamato xml.dump) di cui dovrei fare un parsing tramite python in modo da potere processare i suoi diversi tag.

ho importato il modulo minidom correttamente, ma quando eseguo la linea di codice:

Codice:
minidom.parse('C:\\xml.dump')
mi da questo errore

Codice:
Traceback (most recent call last):
  File "<pyshell#147>", line 1, in -toplevel-
    minidom.parse('C:\\xml.dump')
  File "C:\Python23\lib\xml\dom\minidom.py", line 1915, in parse
    return expatbuilder.parse(file)
  File "C:\Python23\lib\xml\dom\expatbuilder.py", line 924, in parse
    result = builder.parseFile(fp)
  File "C:\Python23\lib\xml\dom\expatbuilder.py", line 207, in parseFile
    parser.Parse(buffer, 0)
ExpatError: junk after document element: line 66, column 0
da cosa deriva questo problema e come posso rislverlo?
grazie
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2008, 13:28   #2
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Non ho mai usato il miniDOM parser, ma xml.parsers.expat.

Comunque posta il file xml.dump (io lo chiamerei dump.xml ), così possiamo fare qualche prova.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2008, 13:37   #3
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
anche io lo rinominerei *.xml, ma l'applicazione che fa il dump a ora mi consegna un file con quell'estensione.

il contenuto del file non è importante. anche con un file xml base mi da gli stessi problemi! forse il problema è dipendente dal contenuto delle parentesi (non so se è corretto scrivere il percorso intero del file)
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2008, 13:50   #4
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
ho provato a usare xml.parsers.expat e ho risultati migliori, anche se dopo queste righe di codice:

Codice:
>>> import xml.parsers.expat
>>> p = xml.parsers.expat.ParserCreate()
>>> docxml = p.Parse('xml-001322.dump')
>>> print docxml
mi stampa a video: 1
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2008, 13:58   #5
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Io lo uso così:
Codice:
    self.p = xml.parsers.expat.ParserCreate()
    self.p.buffer_text = True
    self.p.returns_unicode = False
    self.p.StartElementHandler = self.start_element
    self.p.EndElementHandler = self.end_element
    self.p.CharacterDataHandler = self.char_data
e funziona perfettamente.

All'interno di una classe, ovviamente.

Gli handler sono metodi della classe (ma possono anche essere funzioni esterne).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2008, 14:19   #6
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
in che classe hai messo tutto questo?

e poi come faresti la chiamata al fantomatico xml.dump?
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2008, 19:50   #7
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
E' una normalissima classe. La puoi creare anche vuota.

Per usarlo basta fare così:
Codice:
with open('xml.dump') as f:
    self.p.ParseFile(f)
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2008, 08:50   #8
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
ciao,

ho provato a fare come hai detto tu, mettendo quelle righe di codice in una classe, che chiamo parsing

Codice:
class parsing:
    self.p = xml.parsers.expat.ParserCreate()
    self.p.buffer_text = True
    self.p.returns_unicode = False
    self.p.StartElementHandler = self.start_element
    self.p.EndElementHandler = self.end_element
    self.p.CharacterDataHandler = self.char_data
però così mi da errore perchè non ho dichiarato self. cosa devo modificare?

a te sembreranno cose ovvie, ma per me che sono agli inizi della programmazione in python non lo sono per niente!
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2008, 08:58   #9
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Potevi dirlo prima.

Ecco qua:
Codice:
from __future__ import with_statement
import xml.parsers.expat

class SimpleXMLParser(object):


  def __init__(self, FileName):

    self.p = xml.parsers.expat.ParserCreate()
    self.p.buffer_text = True
    self.p.returns_unicode = False
    self.p.StartElementHandler = self.start_element
    self.p.EndElementHandler = self.end_element
    self.p.CharacterDataHandler = self.char_data
    with open(FileName) as f:
      self.p.ParseFile(f)


  def start_element(self, name, attrs):

    print 'Ho trovato il tag', name, 'con gli attributi', attrs


  def end_element(self, name):

    print 'Tag', name, 'chiuso'


  def char_data(self, data):

    print 'In mezzo al tag ho trovato questi dati:', data 


SimpleXMLParser('xml.dump')
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2008, 09:06   #10
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
ok!

ho provato a compilare tutto, mettendolo in un file (es parser.py)! mi da questo errore

Codice:
SyntaxError: Invalid Syntax
e mi segna la riga

Codice:
    with open(FileName) as f:
in particolare "open"

grazie per la pazienza!
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2008, 09:42   #11
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Probabilmente c'è qualche problema di indentazione.

Eventualmente riportami il file che hai creato o il traceback dello stack.

P.S. Di nulla.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2008, 16:03   #12
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
eccolo qui:

Codice:
from __future__ import with_statement
import xml.parsers.expat

class SimpleXMLParser(object):


  def __init__(self, FileName):

    self.p = xml.parsers.expat.ParserCreate()
    self.p.buffer_text = True
    self.p.returns_unicode = False
    self.p.StartElementHandler = self.start_element
    self.p.EndElementHandler = self.end_element
    self.p.CharacterDataHandler = self.char_data
    
  with open(FileName) as f:
    self.p.ParseFile(f)


  def start_element(self, name, attrs):

    print 'Ho trovato il tag', name, 'con gli attributi', attrs


  def end_element(self, name):

    print 'Tag', name, 'chiuso'


  def char_data(self, data):

    print 'In mezzo al tag ho trovato questi dati:', data 


SimpleXMLParser('xml.dump')
ah, ma questo codice mi trova il file ovunque si trovi?
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2008, 07:34   #13
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da Sick Boy Guarda i messaggi
eccolo qui:

Codice:
from __future__ import with_statement
import xml.parsers.expat

class SimpleXMLParser(object):


  def __init__(self, FileName):

    self.p = xml.parsers.expat.ParserCreate()
    self.p.buffer_text = True
    self.p.returns_unicode = False
    self.p.StartElementHandler = self.start_element
    self.p.EndElementHandler = self.end_element
    self.p.CharacterDataHandler = self.char_data
    
  with open(FileName) as f:
    self.p.ParseFile(f)


  def start_element(self, name, attrs):

    print 'Ho trovato il tag', name, 'con gli attributi', attrs


  def end_element(self, name):

    print 'Tag', name, 'chiuso'


  def char_data(self, data):

    print 'In mezzo al tag ho trovato questi dati:', data 


SimpleXMLParser('xml.dump')
Hai sbagliato l'indentazione dell'istruzione with.

Il codice corretto è questo:
Codice:
from __future__ import with_statement
import xml.parsers.expat

class SimpleXMLParser(object):


  def __init__(self, FileName):

    self.p = xml.parsers.expat.ParserCreate()
    self.p.buffer_text = True
    self.p.returns_unicode = False
    self.p.StartElementHandler = self.start_element
    self.p.EndElementHandler = self.end_element
    self.p.CharacterDataHandler = self.char_data
    
    with open(FileName) as f:
      self.p.ParseFile(f)


  def start_element(self, name, attrs):

    print 'Ho trovato il tag', name, 'con gli attributi', attrs


  def end_element(self, name):

    print 'Tag', name, 'chiuso'


  def char_data(self, data):

    print 'In mezzo al tag ho trovato questi dati:', data 


SimpleXMLParser('xml.dump')
Quote:
ah, ma questo codice mi trova il file ovunque si trovi?
No, dev'essere nella cartella in cui hai lanciato l'applicazione.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2008, 09:01   #14
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
anche così indentato mi da lo stesso errore!
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2008, 09:24   #15
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Prima di postarlo l'ho provato. Ecco qua (scusa la censura, ma ho ho usato un xml di produzione):
Codice:
D:\Test>python "Prova XML.py"
Ho trovato il tag PEPCommandList con gli attributi {'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance', 'xsi:noNamespaceSchemaLocation': '\\PEPCommand
.xsd'}
In mezzo al tag ho trovato questi dati:

Ho trovato il tag PEPCommand con gli attributi {}
In mezzo al tag ho trovato questi dati:

Ho trovato il tag id_comando con gli attributi {'value': '1383288'}
Tag id_comando chiuso
In mezzo al tag ho trovato questi dati:

Ho trovato il tag id_autorizzazione con gli attributi {'idAuth': '2'}
Tag id_autorizzazione chiuso
In mezzo al tag ho trovato questi dati:

Ho trovato il tag id_csp con gli attributi {'IDValue': '***CENSORED***'}
Tag id_csp chiuso
In mezzo al tag ho trovato questi dati:

Ho trovato il tag op_type con gli attributi {'op_typeValue': 'DISATTIVAZIONE'}
Tag op_type chiuso
In mezzo al tag ho trovato questi dati:

Ho trovato il tag username con gli attributi {'nameValue': '***CENSORED***'}
Tag username chiuso
In mezzo al tag ho trovato questi dati:

Ho trovato il tag type con gli attributi {'typeValue': 'TRIGGER_CLASSICO'}
Tag type chiuso
In mezzo al tag ho trovato questi dati:

Ho trovato il tag canale_in con gli attributi {'chosenInStream': 'SMS'}
Tag canale_in chiuso
In mezzo al tag ho trovato questi dati:

Ho trovato il tag canale_out con gli attributi {'chosenOutStream': 'WAP-PUSH'}
Tag canale_out chiuso
In mezzo al tag ho trovato questi dati:

Ho trovato il tag categoria con gli attributi {'serviceId': '***CENSORED***'}
Tag categoria chiuso
In mezzo al tag ho trovato questi dati:

Ho trovato il tag motivo con gli attributi {'motivoValue': 'Stato Utenza'}
Tag motivo chiuso
In mezzo al tag ho trovato questi dati:

Ho trovato il tag la_mittente con gli attributi {'la_mittenteValue': '12345'}
Tag la_mittente chiuso
In mezzo al tag ho trovato questi dati:

Tag PEPCommand chiuso
In mezzo al tag ho trovato questi dati:

Tag PEPCommandList chiuso
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2008, 09:33   #16
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
non riesco a capire il problema che ho.

mi spieghi la linea di codice

from __future__ import with_statement
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2008, 09:44   #17
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
ok, ora mi stampa a video le informazioni!

ho cancellato la prima riga di import e ho usato al posto delle due linee in cui apre il file questa unica riga di codice:

self.p.ParseFile(open(FileName))

così funziona! ora devo formattare meglio l'output perchè il dump che ricevo in ingresso è formato da più tag "<?xml.." e infatti dopo il primo elemento di quel file mi da queste linee di errore:

Codice:
Traceback (most recent call last):
  File "parser.py", line 24 in ?
    SimpleXMLParser('xml.dump')
  File "parser.py", line 13, in __init__
    self.p.ParseFile(open(FileName))
xml.parsers.expat.ExpatError: junk after document element: line 66, column 0
e poi c'è la seconda fase:

CREARE UNA FINESTRA CHE MI MOSTRI I VARI TAG PADRE CON ALL'INTERNO I TAG FIGLIO

Ultima modifica di Sick Boy : 02-10-2008 alle 09:54.
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2008, 09:55   #18
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da Sick Boy Guarda i messaggi
non riesco a capire il problema che ho.

mi spieghi la linea di codice

from __future__ import with_statement
Ti permette di usare l'istruzione with.
Quote:
Originariamente inviato da Sick Boy Guarda i messaggi
ok, ora mi stampa a video le informazioni!

ho cancellato la prima riga di import e ho usato al posto delle due linee in cui apre il file questa unica riga di codice:

self.p.ParseFile(open(FileName))

così funziona! ora devo formattare meglio l'output.
Di norma dovresti aprire il file e poi chiuderlo.
Quote:
e poi c'è la seconda fase:

CREARE UNA FINESTRA CHE MI MOSTRI I VARI TAG PADRE CON ALL'INTERNO I TAG FIGLIO
Non mi sono ancora cimentato con le interfacce grafiche con Python, mi spiace.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2008, 10:15   #19
Sick Boy
Senior Member
 
L'Avatar di Sick Boy
 
Iscritto dal: Dec 2006
Città: Brescia
Messaggi: 497
e per questo problema? il dump che ha più tag xml cosa faresti?

Quote:
Originariamente inviato da Sick Boy Guarda i messaggi
ora devo formattare meglio l'output perchè il dump che ricevo in ingresso è formato da più tag "<?xml.." e infatti dopo il primo elemento di quel file mi da queste linee di errore:

Codice:
Traceback (most recent call last):
  File "parser.py", line 24 in ?
    SimpleXMLParser('xml.dump')
  File "parser.py", line 13, in __init__
    self.p.ParseFile(open(FileName))
xml.parsers.expat.ExpatError: junk after document element: line 66, column 0
Sick Boy è offline   Rispondi citando il messaggio o parte di esso
Old 03-10-2008, 07:15   #20
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Non mi sembra sia un XML standard. Dovrebbe avere un solo tag <xml

In questo caso dovresti prendere il file, leggerlo in memoria, suddividerlo nelle sezioni xml presenti e parserizzarle una alla volta.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza Sottile, leggero e dall'autonomia WOW: OPPO Reno...
Destiny Rising: quando un gioco mobile supera il gioco originale Destiny Rising: quando un gioco mobile supera il...
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo Plaud Note Pro convince per qualità e int...
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Intel e NVIDIA uniscono le forze: cos&ig...
Silent Hill f raccoglie ottimi voti su F...
L'industria farmaceutica americana si af...
Xiaomi YU7 GT avvistato al Nurburgring: ...
Intelligenza artificiale, agenti e strum...
Blocco note porta l'AI gratis sui PC, e ...
Arkheron, il nuovo gioco dell'ex lead de...
HONOR conferma Magic8: avrà AI na...
Auto volanti, il sogno si infrange: il p...
Cantieri in autostrada? Dal 2026 lo Stat...
Tesla non è molto trasparente su ...
Microsoft e NVIDIA guidano maxi-investim...
L'IA tira a indovinare? Non è un ...
'Limitare il riscaldamento globale a +1,...
Windows 11 25H2 si aggiorna già: ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:02.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v