Writing Subchild with DOM
-
I already have an XML file, I need to write under a Header, Below i have show a my XML file.
<MAIN_HEADER> <HEADER1> //it's child </HEADER1> <HEADER2> //it's child> </HEADER2> <HEADER3> //EMPTY </HEADER3> <HEADER4> //it's child </HEADER4> </MAIN_HEADER>
I need to write child and subchild inside HEADER3 . Below is my code.
QFile file(output); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug()<<"file doesnt exists"; } QDomDocument domDocument; if( !domDocument.setContent( &file ) ) { qDebug()<<"Error"; return; } QDomElement topElement = domDocument.documentElement(); QDomNode domNode = topElement.firstChild(); while(!domNode.isNull()) { QDomElement domElement = domNode.toElement(); if(!domElement.isNull()) { if(domElement.tagName() == "HEADER3") { for(int i=0; i<List.count();i++) { QDomElement node = domDocument.createElement("CHILD"); node.setAttribute("Name", List[i].Filename); node.setAttribute("Value", List[i].value); domElement.appendChild(node); if(List[i].subChild.size() != 0) { QDomElement subNode = domDocument.createElement("SubChild"); subNode.setAttribute("Name", List[i].SubChild); node.appendChild(subNode); } } } } domNode = domNode.nextSibling(); } file.close(); QFile outfile( output); if( !outfile.open( QIODevice::WriteOnly | QIODevice::Text ) ) { qDebug()<<"Error"; } QTextStream stream1( &outfile ); stream1 << dom.toString(); outfile.close();
This code gets stuck inside while loop, I'm not so sure about the hierarchy in this code. I just want to write the contents in <HEADER3>
-
Well, at some point you must read you document, i.e. go from one node to the other. At the end of the loop you should do something like
domNode = domeNode.nextSibling()
. If you don't do so, you're endlessly reading the first node of your document, as I've told you before. -
Ah! Thank you! @JohanSolo Now it goes through the loop properly, but the contents of the header is still empty. I just debugged, found out it never goes into
if(domElement.text() == "HEADER3")
I am not sure about hierarchy in the code. but the hierarchy in my XML file is as shown in this XML file
@JohanSolo I have edited the code accordingly
-
Yes! @JohanSolo Now it goes inside the loop, but does not write the contents inside HEADER3. This time i have no idea why. I have updated the code. Please do take a look.
-