bin noch neu in der Welt von C++/Qt und habe eine hoffentlich einfache Frage an euch.
Ich möchte eine XML Datei erstellen, in der Konfigurationsparameter abgespeichert werden.
Das klappt auch soweit ganz gut, nur habe ich noch 2 Probleme mit der Formatierung.
Die XML Datei sieht zur Zeit so aus:
Code: Alles auswählen
<!DOCTYPE Konfigurationsdatei des Trace Service>
<traceCaptureSetup>
<collectionSettings atCapacity="discard" powerOnStart="false" timeLimit="30.00000" appendData="false" deferOffload="true" endless="false" capacity="60000" autoRestart="false" />
<sessionSettings clientPrivilegeRead="password" clientPrivilegeManage="exclusive" archiveSetting="NCU" expirationPeriod="0" sessionName="SampleSession" />
<sampleRateSettings servoSampleRate=".002" ipo2SampleRate=".008" ipo1SampleRate=".008" />
<signal eventChannel="1" domain="NCU_1" event="1" description="Position, Sollwert X-Achse" displayRes="5" key="s1" dataType="double" unitsType="none" name="+/Channel/MachineAxis/cmdContrPos[u1, 1]" />
<signal eventChannel="1" domain="NCU_1" event="1" description="R parameter (from SW 3.3):Ch1[1]" displayRes="5" key="s2" dataType="double" unitsType="none" name="+/Channel/!RP/rpa[u1, 2]" />
</traceCaptureSetup>Code: Alles auswählen
<traceCaptureSetup>
<collectionSettings atCapacity="discard" powerOnStart="false" timeLimit="30.00000" appendData="false" deferOffload="true" endless="false" capacity="60000" autoRestart="false" />
<sessionSettings clientPrivilegeRead="password" clientPrivilegeManage="exclusive" archiveSetting="NCU" expirationPeriod="0" sessionName="SampleSession" />
<sampleRateSettings servoSampleRate=".002" ipo2SampleRate=".008" ipo1SampleRate=".008" />
<signalSettings>
<signal eventChannel="1" domain="NCU_1" event="1" description="Position, Sollwert X-Achse" displayRes="5" key="s1" dataType="double" unitsType="none" name="+/Channel/MachineAxis/cmdContrPos[u1, 1]" />
<signal eventChannel="1" domain="NCU_1" event="1" description="R parameter (from SW 3.3):Ch1[1]" displayRes="5" key="s2" dataType="double" unitsType="none" name="+/Channel/!RP/rpa[u1, 2]" />
</signalSettings></traceCaptureSetup>- Die erste Zeile soll in der fertigen Datei nicht enthalten sein (!Doctype ...), wie verhindert man dessen Erstellung?
- Die beiden "signal" sollen ein Unterpunkt von "signalSettings" sein
Der Code:
Code: Alles auswählen
//////////////////////////////////////////////////////////////////////////////
traceCalibrationa ca; // trace Calibration Objekte
traceCalibrationb cb;
traceCalibrationc cc;
traceCalibrationd cd;
// Gehört zum Test (siehe Unten)
QDomElement ContactToNode1( QDomDocument &d, const traceCalibrationa &ca ) //, const traceCalibrationb &cb )
{
QDomElement cn = d.createElement( "collectionSettings" );
cn.setAttribute( "appendData", ca.appendData );
cn.setAttribute( "endless", ca.endless );
cn.setAttribute( "atCapacity", ca.atCapacity );
cn.setAttribute( "autoRestart", ca.autoRestart );
cn.setAttribute( "capacity", ca.capacity );
cn.setAttribute( "powerOnStart", ca.powerOnStart );
cn.setAttribute( "timeLimit", ca.timeLimit );
cn.setAttribute( "deferOffload", ca.deferOffload );
return cn;
}
QDomElement ContactToNode2( QDomDocument &d, const traceCalibrationb &cb )
{
QDomElement cn = d.createElement( "sessionSettings" );
cn.setAttribute( "sessionName", cb.sessionName );
cn.setAttribute( "archiveSetting", cb.archiveSetting );
cn.setAttribute( "clientPrivilegeRead", cb.clientPrivilegeRead );
cn.setAttribute( "clientPrivilegeManage", cb.clientPrivilegeManage );
cn.setAttribute( "expirationPeriod", cb.expirationPeriod);
return cn;
}
QDomElement ContactToNode3( QDomDocument &d, const traceCalibrationc &cc )
{
QDomElement cn = d.createElement( "sampleRateSettings" );
cn.setAttribute( "ipo1SampleRate", cc.ipo1SampleRate );
cn.setAttribute( "ipo2SampleRate", cc.ipo2SampleRate );
cn.setAttribute( "servoSampleRate", cc.servoSampleRate );
return cn;
}
QDomElement ContactToNode4( QDomDocument &d, const traceCalibrationd &cd )
{
QDomElement cn = d.createElement( "signal" );
cn.setAttribute( "key", cd.key);
cn.setAttribute( "domain" , cd.domain);
cn.setAttribute( "event", cd.eventc );
cn.setAttribute( "eventChannel", cd.eventChannel);
cn.setAttribute( "name", cd.name );
cn.setAttribute( "description", cd.description);
cn.setAttribute( "dataType", cd.dataType);
cn.setAttribute( "unitsType", cd.unitsType);
cn.setAttribute( "displayRes", cd.displayRes);
return cn;
}
//////////////////////////////////////////////////////////////////////////
// Schreiben einer XMl Datei
////////////////////////////////////////////
bool kennlinie_form1::writeXml2()
{
QDomDocument doc( "Konfigurationsdatei des Trace Service" );
// <traceCaptureSetup>
QDomElement root = doc.createElement( "traceCaptureSetup" );
doc.appendChild( root );
ca.appendData = "false";
ca.endless = "false";
ca.atCapacity = "discard";
ca.autoRestart = "false";
ca.capacity = "60000";
ca.powerOnStart = "false";
ca.timeLimit = "30.00000";
ca.deferOffload = "true";
root.appendChild( ContactToNode1 ( doc, ca ) );
doc.appendChild ( root );
cb.sessionName = "SampleSession";
cb.archiveSetting = "NCU";
cb.clientPrivilegeRead = "password";
cb.clientPrivilegeManage = "exclusive";
cb.expirationPeriod = "0";
root.appendChild( ContactToNode2( doc, cb ) );
doc.appendChild ( root );
cc.ipo1SampleRate = ".008";
cc.ipo2SampleRate = ".008";
cc.servoSampleRate = ".002";
root.appendChild( ContactToNode3( doc, cc) );
doc.appendChild (root);
cd.key = "s1";
cd.domain = "NCU_1";
cd.eventc = "1";
cd.eventChannel = "1";
cd.name = "+/Channel/MachineAxis/cmdContrPos[u1, 1]";
cd.description = "Position, Sollwert X-Achse";
cd.dataType = "double";
cd.unitsType = "none";
cd.displayRes = "5";
root.appendChild( ContactToNode4( doc, cd) );
doc.appendChild (root);
cd.key = "s2";
cd.domain = "NCU_1";
cd.eventc = "1";
cd.eventChannel = "1";
cd.name = "+/Channel/!RP/rpa[u1, 2]";
cd.description = "R parameter (from SW 3.3):Ch1[1]";
cd.dataType = "double";
cd.unitsType = "none";
cd.displayRes = "5";
root.appendChild( ContactToNode4( doc, cd) );
//doc.appendChild (root);
QFile file( "/hmisl/oem/sinumerik/hmi/data/schreiben.xml" ); // Pfad angeben
if( !file.open( QIODevice::WriteOnly ) ) // Datei erstellen
return 1;
QTextStream ts( &file ); // In Datei schreiben
ts << doc.toString();
file.close();
return 0;
//return false;
} // <-- bool kennlinie_form1::writeXml2()Gruß, Stacked