EList KalziumDataObject::readData( QDomDocument &dataDocument ) { EList list; QDomNodeList elementNodes; //the list of all element QDomElement domElement; //a single element //read in all elements elementNodes = dataDocument.elementsByTagName( "element" ); const uint count = elementNodes.count(); for ( uint i = 0; i < count; ++i ) {//iterate through all elements domElement = ( const QDomElement& ) elementNodes.item( i ).toElement(); double mass = domElement.namedItem( "mass" ).toElement().text().toDouble(); double en = domElement.namedItem( "electronegativity" ).toElement().text().toDouble(); double ea = domElement.namedItem( "electronaffinity" ).toElement().text().toDouble(); double mp = domElement.namedItem( "meltingpoint" ).toElement().text().toDouble(); double bp = domElement.namedItem( "boilingpoint" ).toElement().text().toDouble(); double density = domElement.namedItem( "density" ).toElement().text().toDouble(); double covalent_radius = domElement.namedItem( "radius" ).namedItem( "covalent" ).toElement().text().toDouble(); //van der Waals-Radius double vdw_radius = domElement.namedItem( "radius" ).namedItem( "vdw" ).toElement().text().toDouble(); double atomic_radius = domElement.namedItem( "radius" ).namedItem( "atomic" ).toElement().text().toDouble(); double ionic_radius = domElement.namedItem( "radius" ).namedItem( "ionic" ).toElement().text().toDouble(); QString ionic_charge = domElement.namedItem( "radius" ).namedItem( "ionic" ).toElement().attributeNode( "charge" ).value(); int bio = domElement.namedItem( "biologicalmeaning" ).toElement().text().toInt(); int radioactive = domElement.namedItem( "radioactive" ).toElement().text().toInt(); int period = domElement.namedItem( "period" ).toElement().text().toInt(); int artificial = domElement.namedItem( "artificial" ).toElement().text().toInt(); int date = domElement.namedItem( "date" ).toElement().text().toInt(); int number = domElement.namedItem( "number" ).toElement().text().toInt(); int abundance = domElement.namedItem( "abundance" ).toElement().text().toInt(); QString scientist = domElement.namedItem( "date" ).toElement().attributeNode( "scientist" ).value(); QString crystal = domElement.namedItem( "crystalstructure" ).toElement().text(); QDomElement nameE = domElement.namedItem( "name" ).toElement(); QString name = nameE.text(); QString origin = i18n( nameE.attributeNode( "origin" ).value().utf8() ); QString block = domElement.namedItem( "block" ).toElement().text(); QString group = domElement.namedItem( "group" ).toElement().text(); QString family = domElement.namedItem( "family" ).toElement().text(); QString orbits = domElement.namedItem( "orbits" ).toElement().text(); QString symbol = domElement.namedItem( "symbol" ).toElement().text(); QString oxydation = domElement.namedItem( "oxydation" ).toElement().text(); QString acidicbehaviour = domElement.namedItem( "acidicbehaviour" ).toElement().text(); QDomNodeList elist = domElement.elementsByTagName( "energy" ); QValueList<double> ionlist; for( uint i = 0; i < elist.length(); i++ ) { ionlist.append( elist.item( i ).toElement().text().toDouble() ); } //now read in all the date for the isotopes QDomNodeList isotopelist = domElement.elementsByTagName( "isotope" ); QValueList<Isotope*> isolist; for( uint i = 0; i < isotopelist.length(); i++ ) { QDomElement iso = isotopelist.item( i ).toElement(); double halflife = iso.attributeNode( "halflife" ).value().toDouble(); double weight = iso.attributeNode( "weight" ).value().toDouble(); QString format = iso.attributeNode( "halflifeformat" ).value(); int neutrons = iso.attributeNode( "neutron" ).value().toInt(); double percentage = iso.attributeNode( "percentage" ).value().toDouble(); double alphapercentage = iso.attributeNode( "alphapercentage" ).value().toDouble(); double betapluspercentage = iso.attributeNode( "betapluspercentage" ).value().toDouble(); double betaminuspercentage = iso.attributeNode( "betaminuspercentage" ).value().toDouble(); double ecpercentage = iso.attributeNode( "ecpercentage" ).value().toDouble(); double alphadecay = iso.attributeNode( "alphadecay" ).value().toDouble(); double betaplusdecay = iso.attributeNode( "betaplusdecay" ).value().toDouble(); double betaminusdecay = iso.attributeNode( "betaminusdecay" ).value().toDouble(); double ecdecay = iso.attributeNode( "ecdecay" ).value().toDouble(); QString spin = iso.attributeNode( "spin" ).value(); QString magmoment = iso.attributeNode( "magmoment" ).value(); Isotope *isotope = new Isotope( neutrons, number, percentage, weight, halflife, format, alphadecay, betaplusdecay, betaminusdecay, ecdecay, alphapercentage, betapluspercentage, betaminuspercentage, ecpercentage, spin, magmoment ); isolist.append( isotope ); } QDomNodeList spectrumList = domElement.namedItem( "spectra" ).toElement().elementsByTagName( "spectrum" ); Element *e = new Element(); e->setDate(date); e->setBiologicalMeaning(bio); e->setNumber( number ); e->setName(i18n(name.utf8())); e->setRadius( Element::ATOMIC, atomic_radius ); e->setRadius( Element::IONIC, ionic_radius, ionic_charge ); e->setRadius( Element::COVALENT, covalent_radius ); e->setRadius( Element::VDW, vdw_radius ); e->setAbundance( abundance ); if ( artificial == 1 ) e->setArtificial(); if ( radioactive == 1 ) e->setRadioactive(); e->setScientist(scientist); e->setPeriod( period ); e->setCrysatalstructure( crystal ); e->setOrigin(origin); e->setBlock(block); e->setGroup(group); e->setFamily(family); e->setOrbits(orbits); e->setSymbol(symbol); e->setOxydation(oxydation); e->setAcidicbehaviour(acidicbehaviour); e->setIonisationList( ionlist ); e->setIsotopeList( isolist ); e->setMass( mass ); e->setEN( en ); e->setEA( ea ); e->setMeltingpoint( mp ); e->setBoilingpoint( bp ); e->setDensity( density ); e->setupXY(); Spectrum *spectrum = new Spectrum(); bool spectrum_temp = false; if ( spectrumList.length() > 0 ) spectrum_temp = true; for( uint i = 0; i < spectrumList.length(); i++ ) { Spectrum::band b; QDomElement spec = spectrumList.item( i ).toElement(); b.intensity = spec.attributeNode( "intensity" ).value().toInt(); b.wavelength = spec.attributeNode( "wavelength" ).value().toDouble()/10.0; b.aki = spec.attributeNode( "aki" ).value().toDouble(); b.energy1 = spec.attributeNode( "energy1" ).value().toDouble(); b.energy2 = spec.attributeNode( "energy2" ).value().toDouble(); b.electronconfig1 = spec.attributeNode( "electronconfig1" ).value(); b.electronconfig2 = spec.attributeNode( "electronconfig1" ).value(); b.term1 = spec.attributeNode( "term1" ).value(); b.term2 = spec.attributeNode( "term2" ).value(); b.J1 = spec.attributeNode( "J1" ).value(); b.J2 = spec.attributeNode( "J2" ).value(); spectrum->addBand( b ); } if ( spectrum_temp ) //if no spectrumdata are found don't use this object e->setSpectrum( spectrum ); e->setHasSepctrum( spectrum_temp ); list.append( e ); coordinate point; point.x = e->x; point.y = e->y; CoordinateList.append( point ); } return list; }