Seite 1 von 1

QDomDocument und Sonderzeichen

Verfasst: 12. Juni 2008 15:47
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

Verfasst: 12. Juni 2008 16:41
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.

Re: QDomDocument und Sonderzeichen

Verfasst: 13. Juni 2008 09:09
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/