Ich verwende XML, um Projektinformationen zwischen Anwendungen zu übermitteln. Eine der Informationen ist die Projektbeschreibung. Ich habe also:
<ProjectDescription>Test & spaces around&some & amps!</ProjectDescription>
Oder: "Test & Räume um&some & Amps!" <-- GUT!
Wenn ich dann Expat verwende, um sie zu parsen, erhält mein Data Handler jeweils nur Teile der gesamten Zeichenfolge. "Test", dann "&", dann "Leerzeichen", das nächste "&", etc, etc. Wenn ich dann versuche, die ursprüngliche Zeichenfolge zu rekonstruieren, werden alle Abstände um die "&"s herum weggelassen, weil der Data Handler sie nie zu sehen bekommt. Wenn ich dann die XML neu schreibe, erhalte ich:
<ProjectDescription>Test&spaces around&some&amps!</ProjectDescription>
Oder: "Teste&Räume um&einige&Verstärker!" <-- SCHLECHT!
Ist dies ein bekanntes Problem, für das es bereits Abhilfen gibt? Gibt es eine Einstellung, die ich Expat geben kann, um sein Verhalten bei escapeten Symbolen zu steuern?
Meine Versuche, eine Antwort zu googeln, sind kläglich gescheitert.
EDIT: Als Antwort auf eine Frage in den Kommentaren: Ich habe meinen eigenen Handler, den ich beim Parser registriere:
parser=XML_ParserCreate(NULL);
XML_SetUserData(parser,&depth);
XML_SetElementHandler(parser,startElement,endElement);
XML_SetCharacterDataHandler(parser,dataHandler);
Der Handler wird wie folgt deklariert:
static void dataHandler(void *userData,const XML_Char *s,int l)
Und dann enthält "s" die Daten in dem Element. Ohne "&" ist es die gesamte Zeichenkette zwischen den Tags "open" und "close", im Fall von "a string with spaces".
0 Stimmen
Aus Ihrem bearbeiteten Code sieht es so aus, als würden Sie den Längenparameter des Handlers nicht berücksichtigen.
0 Stimmen
Aha! Ich berücksichtige das schon, aber Ihr Kommentar hat mich dazu gebracht, mir einen Teil des Codes anzusehen, den ich für selbstverständlich hielt. Ich sollte es besser wissen, als den Code, den die Kollegen schreiben, für bare Münze zu nehmen! Vielen Dank für die Hilfe!
0 Stimmen
Was hat der Handler getan, um die Leerzeichen zu entfernen? Ich scheine vor dem gleichen Problem zu stehen, und der Handler-Code ist nicht von mir geschrieben. Jeder Vorschlag von Ihnen könnte also sehr nützlich sein. Vielen Dank!