![]() |
Mixxx
|
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