Solved Appending to xml
-
@chawila said in Appending to xml:
@JNBarchan
itried it still get:
Calling appendChild() on a null node does nothing.
So for your root.appendChild(productTag ), debug out both
root
&productTag
?So what are u suggesting about
QIODevice::Append
.For what you want to do, you cannot use
root.appendChild(productTag )
and you cannot "append to the existing XML in the file" in any shape or form. I think from what you're saying you want to:- Read in the whole existing XML file to create the document.
- Do your code which alters the DOM by appending new nodes or whatever.
- Overwrite the complete file with the serialization of the complete DOM document, i.e. no appending, just like creating it from scratch.
-
@JNBarchan
I got compilation Error:No match for 'operator'<<(operand types are 'QDeburg' and QDomElement') qDebug() << root << productTag ;
So how can i do that?..
-
Read in the whole existing XML file to create the document.
-
Do your code which alters the DOM by appending new nodes or whatever.
-
Overwrite the complete file with the serialization of the complete DOM document, i.e. no appending, just like creating it from scratch.
-
-
@chawila
Outline code:if (append) { openFileForReadOnly(); readFileToCreateDOM(); closeFile(); } else { createNewEmptyDom(); possiblyCreateEmptyProductsNode(); } doCodeToPutNewProductNodesUnderProductsNode(); saveWholeDOMDocumentToFileWithOverwrite();
No
ReadWrite
s orAppend
s ;Truncate
only used insaveWholeDOMDocumentToFileWithOverwrite()
if that's what is required to overwrite. See e.g. https://forum.qt.io/topic/43724/solved-save-qdomdocument-to-xml or http://www.qtforum.org/article/2756/how-to-qdomdocument-to-file.html. e.g.file.open( QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text )
when you're ready to overwrite. -
@JNBarchan
So all these:
openFileForReadOnly(); readFileToCreateDOM(); //----------------------- createNewEmptyDom(); possiblyCreateEmptyProductsNode(); //-------------------- doCodeToPutNewProductNodesUnderProductsNode(); saveWholeDOMDocumentToFileWithOverwrite();
Are methods/functions i should create
-
@chawila
Well, yes!
For:createNewEmptyDom(); possiblyCreateEmptyProductsNode();
you already had:
root = doc.createElement("Products"); doc.appendChild(root);
(provided your DOM doc starts out empty).
BTW
QIODevice::WriteOnly 0x0002 The device is open for writing. Note that this mode implies Truncate.
-
@JNBarchan
Ok i`ll keep on trying,
but u are giving me a big task(reaserch
) to do.. -
@chawila
Sorry, I don't see any "big task" or "research" for you to do?
You already seem to know how to read a file to QDomDocument, add nodes to it, and write it out, that's all we're doing. -
@JNBarchan
Let me get into it i`ll be back, hopefully with good news.. -
@chawila
It is your use of "append to xml file" that is faulty. To add new nodes, you do not literally "append" them to the whole file, you add (append/insert) them near the end of the file but not literally at the end of the file.P.S.
You can probably useQDomDocument::save(QTextStream)
as one way of saving the dom doc back to file, if you like. -
@JNBarchan
Thanks,
it was little bit challenging though.. -
@chawila
Well, I'm sorry but "appending to an XML file" is "a bit challenging", because as you've seen you don't quite want to do that... :)