Errore di analisi utilizzando il modulo Perl XML :: DOM, "riferimento a un numero di carattere non valido"

StackOverflow https://stackoverflow.com/questions/1223391

  •  11-07-2019
  •  | 
  •  

Domanda

Sono un newb Perl completo, ma sono certo che imparare il Perl sarà più facile che capire come analizzare XML in awk. Vorrei analizzare i file .sgm da questo set di dati:

http://kdd.ics.uci.edu/d Database/reuters21578/ reuters21578.html

Questa è una raccolta di 20.000 articoli Reuters tratti da newswire di un decennio fa ed è un set di test standard per alcuni tipi di elaborazione del testo. Per semplificare il mio test perl, ho preso le prime centinaia di righe dal primo file e ho creato test.sgm fino a quando il mio script non ha funzionato correttamente su quello. Inizia così:

<!DOCTYPE lewis SYSTEM "lewis.dtd">
<REUTERS TOPICS="YES" LEWISSPLIT="TRAIN" CGISPLIT="TRAINING-SET" OLDID="5544" NEWID="1">
<DATE>26-FEB-1987 15:01:01.79</DATE>
<TOPICS><D>cocoa</D></TOPICS>
<PLACES><D>el-salvador</D><D>usa</D><D>uruguay</D></PLACES>
<PEOPLE></PEOPLE>
<ORGS></ORGS>
<EXCHANGES></EXCHANGES>
<COMPANIES></COMPANIES>
<UNKNOWN> 
&#5;&#5;&#5;C T
&#22;&#22;&#1;f0704&#31;reute
u f BC-BAHIA-COCOA-REVIEW   02-26 0105</UNKNOWN>
<TEXT>&#2;
<TITLE>BAHIA COCOA REVIEW</TITLE>
<DATELINE>    SALVADOR, Feb 26 - </DATELINE><BODY>Showers continued throughout the week in
the Bahia cocoa zone, alleviating the drought since early
January and improving prospects for the coming temporao,...

Ho usato uno script perl da http: // www. xml.com/pub/a/2001/05/16/perlxml.html come esempio, e alla fine con questo, extract.pl:

use XML::DOM;

my $file = $ARGV[0];

my $parser = XML::DOM::Parser->new();
my $doc = $parser->parsefile($file);

#print $doc->getElementsByTagName('DATE');

print "\n";

e ottengo questo output:

> perl extract.pl test.sgm

reference to invalid character number at line 11, column 0, byte 343 at /usr/lib64/perl5/vendor_perl/5.8.5/x86_64-linux-thread-multi/XML/Parser.pm line 187
>

Google non aiuta (l'hit top sembra essere una pagina che presenta lo stesso errore) e il mio amico hacker Perl è ancora sospeso da Blackhat a Las Vegas. Qualche idea su cosa sto facendo di sbagliato o su come posso pulire il file? Presumo che il male stia accadendo all'interno di quello "sconosciuto". tag, di cui non ho nemmeno bisogno. Voglio davvero solo estrarre il testo da ogni articolo. Se hai bisogno di maggiori informazioni, faccelo sapere.

È stato utile?

Soluzione

Il riferimento di carattere numerico " & amp; # 5; " non è legale nei documenti XML validi. Ti rimando alla sezione 4.1 Riferimenti a caratteri ed entità nell'XML raccomandazione:

  

I personaggi indicati utilizzando riferimenti a caratteri DEVONO corrispondere alla produzione per Char.

Ora se seguiamo il link e guardiamo alla produzione per char :

  

Char :: = # x9 | #xA | #xD | [# x20- # xD7FF] | [# xE000- # xFFFD] | [# # X10000- x10FFFF]

vediamo che ci sono alcuni caratteri che non possono apparire né letteralmente, né come riferimento di carattere numerico in un documento XML valido.

Una stranezza che; Ho imparato qualcosa su XML oggi :).

Guarda questa conversazione su Caratteri di controllo ASCII in XML per una possibile soluzione alternativa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top