PDA

View Full Version : QDomDocument::setContent reead only 1 chield but in file is more chield



Pablik
30th October 2013, 11:40
Hi i make QDomDocument and add 2 root chields (Accouts and Tests) next i save to file. Now if i want read this form file, QDomDocument read only 1 root chield (Accounts), Why ??

//Code


#include <QtCore>
#include <QtXml>

void save()
{
QDomDocument XMLDocument;

QDomElement Accounts = XMLDocument.createElement("Accounts");
XMLDocument.appendChild(Accounts);

QDomElement Account1;
Account1 = XMLDocument.createElement("Account");
Account1.setAttribute("Name", "Account1");
Accounts.appendChild(Account1);

QDomElement Account2;
Account2 = XMLDocument.createElement("Account");
Account2.setAttribute("Name", "Account2");
Accounts.appendChild(Account2);


QDomElement Tests = XMLDocument.createElement("Tests");
XMLDocument.appendChild(Tests);

QDomElement Test1;
Test1 = XMLDocument.createElement("Test");
Test1.setAttribute("Name", "Test1");
Tests.appendChild(Test1);

QDomElement Test2;
Test2 = XMLDocument.createElement("Test");
Test2.setAttribute("Name", "Test2");
Tests.appendChild(Test2);


QFile XMLFile("d:/test.xml");

if( XMLFile.open(QIODevice::ReadWrite | QIODevice::Text) )
{
QTextStream tStream(&XMLFile);
tStream << XMLDocument;
}

XMLFile.flush();
XMLFile.close();

}


void load()
{
QFile XMLFile("d:/test.xml");
QDomDocument XMLDocument;

if(XMLFile.open(QIODevice::ReadWrite | QIODevice::Text))
{
XMLDocument.setContent(&XMLFile);
XMLFile.close();
}

qDebug() << XMLDocument.childNodes().count();

}


int main()
{
save();
load();

}

//XMLFile


<Accounts>
<Account Name="Account1"/>
<Account Name="Account2"/>
</Accounts>
<Tests>
<Test Name="Test1"/>
<Test Name="Test2"/>
</Tests>

anda_skoa
30th October 2013, 18:08
You document is missing the outer element, i.e. the root node.

So the parser assumes that Accounts is the root node and stops parsing when it reaches its end.

In other words: there is no such thing as two top level nodes

Cheers,
_