binäre Sonderzeichen aus XML String entfernen

Alles rund um die Programmierung mit Qt
Antworten
anmae
Beiträge: 3
Registriert: 4. September 2014 11:24

binäre Sonderzeichen aus XML String entfernen

Beitrag von anmae »

Hallo zusammen,

ich habe einen XML String, welcher ein ungültiges binäres Zeichen enthält. Dies möchte ich entfernen, bevor ich den QXmlStreamReader mit dem String füttere. Dazu nehme ich QRegExp.
Hier mein Code:

Code: Alles auswählen

void parseXML(const char *xml_stream) {
  QRegExp rx("[^a-zA-Z0-9 \.,\-_\r\n\t'\"]" );
  QString qs(xml_stream);
  qs.replace(rx,"");
...
Was mich wundert: nach dem RegExp sollten normalerweise die <> Zeichen aus dem XML weg sein (habe ich zum Test so eingebaut) - das ist aber nicht so. Diese Zeichen sind noch drin. Das binäre Zeichen ebenfalls.
Was ist an meiner RegExp falsch?

Vielen Dank
anmae
Beiträge: 3
Registriert: 4. September 2014 11:24

Re: binäre Sonderzeichen aus XML String entfernen

Beitrag von anmae »

Frage zurück - es funktioniert so weit. Ich hatte weiter unten im Code den XML Parser erneut mit dem falschen String initialisiert.
Mich wundert trotzdem, dass <> noch im String enthalten war...

Aber: es ist etwas unglücklich, um ein binäres Zeichen (im meinem Fall war es 03 (also EOF) ) aus dem String zu löschen. Kann mir jemand helfen, dass ich alle lesbaren Zeichen (auch andere Sprachen wie Chinesisch) zulasse, aber binäre Zeichen bzw. Steuerbefehle lösche. Gibt es da etwas besseres als RegExp?

Danke
anmae
Beiträge: 3
Registriert: 4. September 2014 11:24

Re: binäre Sonderzeichen aus XML String entfernen

Beitrag von anmae »

Die <> Zeichen haben sich mittlerweile geklärt. Grund war, dass ich \ doppelt auskommentieren muss (Einmal für den C String und einmal für die RegEx).
Nun sieht meine funktionierende RegEx so aus:

Code: Alles auswählen

QRegExp rx("[^a-zA-Z0-9 \\\\\\.,\\-_\\r\\n\\t'\"\\<\\>\\*;/\\~\\+#\\$\\=\\:()]" );
Damit filtere ich aber mit Sicherheit auch sinnvolle Zeichen heraus, welche ich derzeit noch nicht beachte. Im Prinzip wird es wahrscheinlich genügen, alle Zeichen < 0xa zu filtern!? Wenn ja, wie?

Ich habe es einmal damit versucht:

Code: Alles auswählen

 QString(xml_stream).toUtf8()
Das löst das Problem leider nicht - Steuerzeichen werden nicht herausgefiltert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: binäre Sonderzeichen aus XML String entfernen

Beitrag von Christian81 »

Durch den QString in einer Loop durchlaufen und alles was < 0x08 ist rausfiltern.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten