The xml file looks like:
<?xml version="1.0"?>
<hw>
<motor>
<name>mot1</name> <type>stepping_motor</type> <module>oms58</module>
<device>bw4/exp/mot1</device> <control>tango</control> <hostname>has107k</hostname>
</motor>
<motor>
<name>mot2</name> <type>stepping_motor</type> <module>oms58</module>
<device>bw4/exp/mot2</device> <control>tango</control> <hostname>has107k</hostname>
</motor>
<motor>
<name>mot3</name> <type>stepping_motor</type> <module>oms58</module>
<device>bw4/exp/mot3</device> <control>tango</control> <hostname>has107k</hostname>
</motor>
<motor>
<name>mot4</name> <type>stepping_motor</type> <module>oms58</module>
<device>bw4/exp/mot4</device> <control>tango</control> <hostname>has107k</hostname>
</motor>
<motor>
<name>mot5</name> <type>stepping_motor</type> <module>oms58</module>
<device>bw4/exp/mot5</device> <control>tango</control> <hostname>has107k</hostname>
</motor>
<motor>
<name>mot6</name> <type>stepping_motor</type> <module>oms58</module>
<device>bw4/exp/mot6</device> <control>tango</control> <hostname>has107k</hostname>
</motor>
<motor>
<name>mot7</name> <type>stepping_motor</type> <module>oms58</module>
<device>bw4/exp/mot7</device> <control>tango</control> <hostname>has107k</hostname>
</motor>
<motor>
<name>mot8</name> <type>stepping_motor</type> <module>oms58</module>
<device>bw4/exp/mot8</device> <control>tango</control> <hostname>has107k</hostname>
</motor>
</hw>
And an example program for reading it:
#include <stdlib.h>
#include <QtXml>
#include <iostream>
using namespace std;
void getMotorInformation( const QDomElement &motor );
int main(int argc,char** argv){
QDomDocument doc("online");
QFile file("online.xml");
if (!file.open(QIODevice::ReadOnly))
return 0;
if (!doc.setContent(&file)) {
file.close();
return 0;
}
file.close();
// Take the elements that are children of the outermost element.
QDomElement docElem = doc.documentElement();
for(QDomNode n = docElem.firstChild(); !n.isNull(); n = n.nextSibling())
{
if( !n.isNull() ) {
if ( n.isElement() && n.nodeName() == "motor" ) {
QDomElement motor = n.toElement();
getMotorInformation( motor );
}
}
}
return 1;
}
void getMotorInformation( const QDomElement &motor )
{
// visit all children of the motor element and take the info that is needed
string name_for_motor;
for(QDomNode n = motor.firstChild(); !n.isNull(); n = n.nextSibling())
{
if( !n.isNull() ) {
if ( n.isElement() && n.nodeName() == "name" ) {
QDomElement motor = n.toElement();
QString text_my = motor.text();
name_for_motor = text_my.toStdString();
cout << "Debug: name " << name_for_motor << endl;
if(name_for_motor == "mot1") cout << "Debug: mot1 is the name " << endl;
}
}
}
}
This code can be introduced in a standard Qt client.