| Author |
little confusion with appendChild()
|
jeff willis
Greenhorn
Joined: Jul 29, 2004
Posts: 25
|
|
Here is my XML file: (sort of) <ledger> <transaction> <data> DATA1 </data> </transaction> <transaction> <data> DATA2 </data> </transaction> </ledger> My application needs to append another TRANSACTION ELEMENT after the DATA2 transaction element. However, my output ends up looking like this: <ledger> <transaction> <data> DATA1 </data> </transaction> <transaction> <data> DATA2 </data> <TRANSACTION><DATA>data3</DATA></TRANSACTION> </transaction> </ledger> ??? How did it end up there? Here is a code sample: // get the root, then get all the transactions // then get the last transaction... Element root = document.getDocumentElement(); NodeList nl = root.getElementsByTagName("transaction"); Node lastTransaction = nl.item( (nl.getLength()-1) ); // create a new element... Element descElement = createXMLElement( "DATA", txtData.getText()); // create another new element for the new transaction record... Element newTransaction = document.createElement("TRANSACTION"); // place the new "data" with the new transaction... newTransaction.appendChild(descElement); // finally, place the new transaction in the document lastTransaction.appendChild(newTransaction); ...and the new transaction ends up in a place where I didn't expect it. I'm using the javax.xml.transform class to print out my document to screen to verify that the insert took place. So...basically I need to know what I'm doing wrong. I need to be able to append new TRANSACTION element to my document.
|
 |
Lasse Koskela
author
Sheriff
Joined: Jan 23, 2002
Posts: 11962
|
|
This line: does not append newTransaction after lastTransaction. It appends it as lastTransaction's child as the method name, appendChild(), implies.
|
Author of Test Driven (2007) and Effective Unit Testing (2013) [Blog] [HowToAskQuestionsOnJavaRanch]
|
 |
jeff willis
Greenhorn
Joined: Jul 29, 2004
Posts: 25
|
|
Yeah, I guess I'm seeing that for myself now. It's still confusing though because if I execute this line of code: System.out.println("lastTransaction = " + lastTransaction); The output shows the entire last transaction (i.e. transaction #2). By that I mean all the elements and text between the <transaction> </transaction> tags show up in the output. By looking at that output, I figured that I was where I needed to be inside the document. Any idea how I would add another TRANSACTION to my document?
|
 |
jeff willis
Greenhorn
Joined: Jul 29, 2004
Posts: 25
|
|
Well, it looks as if I've stumbled onto my own solution here... I commented out my original appendChild() call and replaced it with an appendChild() call from the root of the document My code now looks like this: It works, but I'm wondering if this how the method is supposed to be called in this situation???
|
 |
Lasse Koskela
author
Sheriff
Joined: Jan 23, 2002
Posts: 11962
|
|
Originally posted by jw wvu: It works, but I'm wondering if this how the method is supposed to be called in this situation???
Yes. Before that statement, the root element (<ledger>...</ledger> contains one child (lastTransaction). After executing that statement, it contains two (lastTransaction and newTransaction).
|
 |
 |
|
|
subject: little confusion with appendChild()
|
|
|