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>
-
No error, It's just stuck, When i debuged it. I found it's stuck in the while loop.
-
@Aashu10 said:
No error, It's just stuck, When i debuged it. I found it's stuck in the while loop.
OK, so the code compiles.
I think you never go to the next node... it just reads forever and ever the first node of you document.
-
Any suggestion how to bypass this?
-
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.
-
I don't see any obvious mistake. Note that I've never used QDomDocument to write a file. It's such a waste of memory according to me...
Edit: you should get a look at the returned value of
appendChild
to check that everything went fine. -
Thanks for replying, How do i check the return value of that. Sorry not so proficient with DomDocument.
10/12