Mixxx

/home/maxime/Projets/Mixxx/1.10/mixxx/src/xmlparse.cpp

Go to the documentation of this file.
00001 //
00002 // C++ Implementation: xmlparse
00003 //
00004 // Description:
00005 //
00006 //
00007 // Author: Tue Haste Andersen <haste@diku.dk>, (C) 2003
00008 //
00009 // Copyright: See COPYING file that comes with this distribution
00010 //
00011 //
00012 
00013 #include "xmlparse.h"
00014 
00015 XmlParse::XmlParse()
00016 {
00017 }
00018 
00019 XmlParse::~XmlParse()
00020 {
00021 }
00022 
00023 int XmlParse::selectNodeInt(const QDomNode &nodeHeader, const QString sNode)
00024 {
00025     return selectNode(nodeHeader, sNode).toElement().text().toInt();
00026 }
00027 
00028 float XmlParse::selectNodeFloat(const QDomNode &nodeHeader, const QString sNode)
00029 {
00030     return selectNode(nodeHeader, sNode).toElement().text().toFloat();
00031 }
00032 
00033 QDomNode XmlParse::selectNode(const QDomNode &nodeHeader, const QString sNode)
00034 {
00035     QDomNode node = nodeHeader.firstChild();
00036     while (!node.isNull())
00037     {
00038         if (node.nodeName() == sNode)
00039             return node;
00040         node = node.nextSibling();
00041     }
00042     return node;
00043 }
00044 
00045 QString XmlParse::selectNodeQString(const QDomNode &nodeHeader, const QString sNode)
00046 {
00047     QString ret;
00048     QDomNode node = selectNode(nodeHeader, sNode);
00049     if (!node.isNull())
00050         ret = node.toElement().text();
00051     else
00052         ret = "";
00053     return ret;
00054 }
00055 
00056 QVector<long> * XmlParse::selectNodeLongArray(const QDomNode &nodeHeader, const QString sNode)
00057 {
00058     QString s;
00059     QDomNode node = selectNode(nodeHeader, sNode);
00060     if (!node.isNull())
00061     {
00062         QDomNode node2 = selectNode(node, "#cdata-section");
00063         if (!node2.isNull())
00064         {
00065             QDomCDATASection node2cdata = node2.toCDATASection();
00066             s = node2cdata.data();
00067         
00068         }
00069     }
00070     QVector<long> *data = new QVector<long>(s.length()/4);
00071     for (unsigned int i=0; i<s.length()/4; ++i)
00072     {
00073         unsigned char c4 = s.at(i*4).toLatin1();
00074         unsigned char c3 = s.at(i*4+1).toLatin1();
00075         unsigned char c2 = s.at(i*4+2).toLatin1();
00076         unsigned char c1 = s.at(i*4+3).toLatin1();
00077 
00078         long v = (long)(c1) + (long)(c2)*0x100 + (long)(c3)*0x10000 + (long)(c4)*0x1000000;
00079 
00080         (*data)[i] = v;
00081     }
00082     return data;
00083 }
00084 
00085 QVector<char> * XmlParse::selectNodeCharArray(const QDomNode &nodeHeader, const QString sNode)
00086 {
00087     QString s;
00088     QDomNode node = selectNode(nodeHeader, sNode);
00089     if (!node.isNull())
00090     {
00091         QDomNode node2 = selectNode(node, "#cdata-section");
00092         if (!node2.isNull())
00093         {
00094             QDomCDATASection node2cdata = node2.toCDATASection();
00095             s = node2cdata.data();
00096         }
00097     }
00098     
00099     QVector<char> *data = new QVector<char>(s.length());
00100     for (unsigned int i=0; i<s.length(); ++i)
00101         (*data)[i] = s.at(i).toLatin1();
00102     
00103     return data;
00104 }
00105 
00106 QVector<char> * XmlParse::selectNodeHexCharArray(const QDomNode &nodeHeader, const QString sNode)
00107 {
00108     QString hexdata;
00109     QDomNode node = selectNode(nodeHeader, sNode);
00110     if (node.isNull()) { return 0; }
00111 
00112     hexdata = node.toElement().text();
00113     int wavebytes = hexdata.length() / 2;
00114     if (wavebytes == 0) { return 0; }
00115 
00116     QVector<char> *data = new QVector<char>(wavebytes);
00117 
00118     bool ok = true;
00119     for (int i=0; i<wavebytes; ++i) {
00120         int byte = hexdata.mid(i*2, 2).toInt(&ok, 16);
00121         (*data)[i] = (char)byte;
00122     }
00123     return data;
00124 }
00125 
00126 QList<long> * XmlParse::selectNodeLongList(const QDomNode &nodeHeader, const QString sNode)
00127 {
00128     QVector<long> *p = selectNodeLongArray(nodeHeader, sNode);
00129     QList<long> *data = new QList<long>;
00130     for (unsigned int i=0; i<p->size(); ++i)
00131         data->append(p->at(i));
00132     return data;
00133 }
00134 
00135 QDomElement XmlParse::addElement(QDomDocument &doc, QDomElement &header, QString sElementName, QString sText)
00136 {
00137     QDomElement element = doc.createElement(sElementName);
00138     element.appendChild(doc.createTextNode(sText));
00139     header.appendChild(element);
00140     return element;
00141 }
00142 
00143 QDomElement XmlParse::addElement(QDomDocument &doc, QDomElement &header, QString sElementName, QList<long> * pData)
00144 {
00145     // Create a string, binstring, that contains the data contained pointet to by pData, and save it in XML
00146     // by use of QDomCDATASection
00147     QString binstring;
00148     for (unsigned int i=0; i<pData->size(); ++i)
00149     {
00150         long v = (pData->at(i));
00151 
00152         // Split long value into four chars
00153         unsigned char c1 = v&0x000000ff;
00154         unsigned char c2 = (v&0x0000ff00)>>8;
00155         unsigned char c3 = (v&0x00ff0000)>>16;
00156         unsigned char c4 = (v&0xff000000)>>24;
00157 
00158         binstring.append(c4);
00159         binstring.append(c3);
00160         binstring.append(c2);
00161         binstring.append(c1);
00162     }
00163 
00164     QDomElement element = doc.createElement(sElementName);
00165     element.appendChild(doc.createCDATASection(binstring));
00166     header.appendChild(element);
00167     return element;
00168 }
00169 
00170 QDomElement XmlParse::addElement(QDomDocument &doc, QDomElement &header, QString sElementName, QVector<char> * pData)
00171 {
00172     // Create a string, binstring, that contains the data contained pointet to by pData, and save it in XML
00173     // by use of QDomCDATASection
00174     QString binstring;
00175     for (unsigned int i=0; i<pData->size(); ++i)
00176         binstring.append(pData->at(i));
00177 
00178     QDomElement element = doc.createElement(sElementName);
00179     element.appendChild(doc.createCDATASection(binstring));
00180     header.appendChild(element);
00181     return element;
00182 }
00183 
00184 QDomElement XmlParse::addHexElement(QDomDocument &doc, QDomElement &header, QString sElementName, QVector<char> * pData)
00185 {
00186     QDomElement element = doc.createElement(sElementName);
00187 
00188     QString hexdata("");
00189     QVector<char>::ConstIterator ci;
00190     for (ci = pData->begin(); ci != pData->end(); ci++) {
00191         char raw = *ci;
00192         hexdata.append(QString::number((raw & 0xf0) >> 4, 16));
00193         hexdata.append(QString::number(raw & 0x0f, 16));
00194     }
00195 
00196     element.appendChild(doc.createTextNode(hexdata));
00197     header.appendChild(element);
00198     return element;
00199 }
00200 /*
00201    QDomElement XmlParse::addElement(QDomDocument &doc, QDomElement &header, QString sElementName, QValueList<int> *pData)
00202    {
00203     // Create a string, binstring, that contains the data contained pointet to by pData, and save it in XML
00204     // by use of QDomCDATASection
00205     QString binstring;
00206     for (unsigned int i=0; i<pData->size(); ++i)
00207         binstring.append((unsigned char)(*pData->at(i)));
00208 
00209     QDomElement element = doc.createElement(sElementName);
00210     element.appendChild(doc.createCDATASection(binstring));
00211     header.appendChild(element);
00212     return element;
00213    }
00214  */
00215 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines