Domanda

sto usando XML per inviare le informazioni di progetto tra le applicazioni. Uno dei pezzi di informazioni è la descrizione del progetto. Così ho:

<ProjectDescription>Test &amp; spaces around&amp;some  &amp;  amps!</ProjectDescription>

Oppure: "Prove e spazi intorno e alcuni e amplificatori!"

Quando Ho quindi utilizzare all'estero 'per analizzare, il mio gestore dati ottiene solo parti di tutta la corda alla volta. "Test", poi "&", poi "spazi intorno", il prossimo "&", ecc, ecc Quando poi provo a ricostruire la stringa originale, tutto lo spazio intorno al & 's è caduto perché il gestore dati non viene mai a guardali. Quando ho poi ri-scrivere il codice XML ottengo:

<ProjectDescription>Test&amp;spaces around&amp;some&amp;amps!</ProjectDescription>

Oppure: "Prove e spazi intorno e alcuni e amplificatori!"

Si tratta di un problema noto con soluzioni alternative esistenti? C'è qualche impostazione che posso dare all'estero 'a controllare il suo comportamento intorno simboli sfuggiti?

I miei tentativi di Googling una risposta si sono incontrati con triste fallimento.

EDIT: In risposta a una domanda nei commenti: Io ho la mia handler, che mi registro con il parser:

parser=XML_ParserCreate(NULL); 
XML_SetUserData(parser,&depth);
XML_SetElementHandler(parser,startElement,endElement); 
XML_SetCharacterDataHandler(parser,dataHandler); 

Il gestore è dichiarato come segue:

static void dataHandler(void *userData,const XML_Char *s,int l) 

E poi "s" contiene i dati del elemento. Senza alcun & roba, è l'intera stringa tra i tag di apertura e chiusura, nel caso di "una stringa con gli spazi".

È stato utile?

Soluzione

Ho appena eseguito un test con la mia libreria che utilizza expat. Il mio gestore si presenta così, con istruzioni di debug per visualizzare ciò che sta accadendo:

void CharDataHandler( void * parser, 
                       const XML_Char *s,
                       int len ) {
    std::cerr << "[" << s << "]\n";
    std::cerr << len << "\n";
    // my own processing here - not important 
}

Non vedo il comportamento si sta parlando. Per i dati di input:

XXX &amp; YYY

ottengo tre eventi con i * e la lunghezza di dati char set come folows:

char * = "XXX &amp; YYY"
length = 4

char * = "&"
length = 1

char * = " YYY"
length = 4

Quindi, gli spazi vengono mantenuti. Per quanto ne so io non sto usando le impostazioni specal. Quale versione e la piattaforma di Expat stai usando?

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