QDomDocument und Sonderzeichen

Alles rund um die Programmierung mit Qt
Antworten
flummi
Beiträge: 11
Registriert: 9. Oktober 2007 12:54

QDomDocument und Sonderzeichen

Beitrag von flummi »

Hallo zusammen,

in XML müssen Sonderzeichen speziell codiert werden, siehe hierzu auch:

http://www.devtrain.de/news.aspx?artnr=296

Mit QDomDocument scheint das aber nicht zu klappen, die XML-Datei wird bei mir zumindest bei Sonderzeichen anstatt mit der Kodierung (z.B. "&# 223 ;" - ohne Space natürlich) erstellt. Kann mir einer sagen warum das so ist und wie man QDomDocument einstellen muss, dass es diese richtig kodiert?

Danke und Grüße,
Flummi
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Du musst selbst darauf achten dass im DomDocument korrekte Daten stehen. Siehe hier - zumindest ist das meine Interpretation der Doku.
Deshalb muss Du wohl, wenn Du eine solche Konvertierung willst, diese wie im anderen Thread schon gesagt, selbst durchführen. Sollte ja nicht so schwer sein.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Re: QDomDocument und Sonderzeichen

Beitrag von patrik08 »

flummi hat geschrieben:Hallo zusammen,

in XML müssen Sonderzeichen speziell codiert werden, siehe hierzu auch:

http://www.devtrain.de/news.aspx?artnr=296

Mit QDomDocument scheint das aber nicht zu klappen, die XML-Datei wird bei mir zumindest bei Sonderzeichen anstatt mit der Kodierung (z.B. "&# 223 ;" - ohne Space natürlich) erstellt. Kann mir einer sagen warum das so ist und wie man QDomDocument einstellen muss, dass es diese richtig kodiert?

Danke und Grüße,
Flummi
Ich kenne das problem, frueher hatte ich das mit so einen filter geloest:

Code: Alles auswählen

static inline QString XHTML3Filter(  QString stream )
{

  QMap<uint,QString> webchars;
  webchars.insert(8226,QString(" ")); /* •  fake MS word */
  webchars.insert(194,QString(" "));
  webchars.insert(13,QString(""));
  webchars.insert(10,QString(""));
  QdocXhtml *convert = new QdocXhtml();
  QString html = convert->Format(stream);  /* tidy try to clean out asci  */
  for (int i = 0; i < html.size(); ++i)   {
    
            QChar sign = html.at(i);
            const uint asciiPos = (uint)sign.unicode();
            bool replaceUnis = false;
             if ((asciiPos >= 240) && (asciiPos <= 255)) {
               replaceUnis = true;
             } else if ((asciiPos >= 224) && (asciiPos <= 239)) {
               replaceUnis = true;
             } else if ((asciiPos >= 192) && (asciiPos <= 223)) {
               replaceUnis = true;
             } else if ( asciiPos >7999 ) {
               replaceUnis = true;
             }
                       if (replaceUnis) {
                       /////////QString charU = QString("%1").arg(asciiPos);
                       ///////QByteArray preU = QByteArray();
                       //////const int prepender = qBound(1,5 - charU.size(),5);
                       ///////preU.fill('0',prepender);
                       ///////const QString UnicodeChar = QString("&#%2%1").arg(charU).arg(preU.data());
                       const QString UnicodeChar = QString("&#%1").arg(asciiPos);
                       webchars.insert(asciiPos,UnicodeChar);
                       }
                    
             
  }
   QMapIterator<uint,QString> i(webchars);
         while (i.hasNext()) {
             i.next();
             html = html.replace(QChar(i.key()),i.value());
          }
  return html;
          
}


Aber nun habe ich bemerkt dass Tidy lib xml vollig genug ist...
wenn irgendwas intern im qt programm passiert lasse ich es unveraendert
aber wenn es extern zu server geht dann nur mit tidylib...
Aus performance grunde habe ich immer gesucht es in einem buffer zu korrigieren.. so wie einem callback oder so... aber ich komme nicht vom file weg, vielleicht bringst du es hin.... las es mir wissen..

Iher die link zu eine qt4 gerechte lib...

http://fop-miniscribus.googlecode.com/s ... estqtidy.h

http://fop-miniscribus.googlecode.com/s ... ules/tidy/
.........................
speack português italiano deutsch english castellà qt
Antworten