views:

386

answers:

2

My goal is to take an XML string and parse it with XMLBeans XmlObject and add a few child nodes.

Here's an example document (xmlString),

<?xml version="1.0"?>
<rootNode>
 <person>
  <emailAddress>[email protected]</emailAddress>
 </person>
</rootNode>

Here's the way I'd like the XML document to be after adding some nodes,

<?xml version="1.0"?>
<rootNode>
 <person>
  <emailAddress>[email protected]</emailAddress>
  <phoneNumbers>
   <home>555-555-5555</home>
   <work>555-555-5555</work>
  <phoneNumbers>
 </person>
</rootNode>

Basically, just adding the <phoneNumbers/> node with two child nodes <home/> and <work/>.

This is as far as I've gotten,

XmlObject xml = XmlObject.Factory.parse(xmlString);

Thank you

A: 

It may be a little difficult to manipulate the objects using just the XmlObject interface. Have you considered generating the XMLBEANS java objects from this xml?

If you don't have XSD for this schema you can generate it using XMLSPY or some such tools.

If you just want XML manipulation (i.e, adding nodes) you could try some other APIs like jdom or xstream or some such thing.

Calm Storm
I haven't tried generating XMLBEANS java objects. Any pointers on where to look or start?I'm pretty new to parsing XML with Java. I'll take a look at jdom and xstream as well.
wsams
It will definitely help if you define clearly what your end goal is. Is it "Adding a few nodes to an existing xml and outputting xml" ?
Calm Storm
Check this link if you want simple manipulation http://exampledepot.com/egs/org.w3c.dom/AddText.html
Calm Storm
Oh sorry, yeah I'd like to take the xml string as input and output the new xml with nodes added as a string. So the input should be xml and the output should be xml with new nodes added.
wsams
So these links http://exampledepot.com/egs/org.w3c.dom/AddNode.html and http://exampledepot.com/egs/org.w3c.dom/AddText.html do not solve your problem ?
Calm Storm
I haven't had a chance to try this out but I will sometime over the weekend. Someone else recommended dom4j so I'll see which one fits best.
wsams
I figured out how to do this effectively yesterday. I'll post info soon.
wsams
A: 

XMLBeans seems like a hassle, here's a solution using xom:

import nu.xom.*;

Builder = new Builder();
Document doc = builder.build(new java.io.StringBufferInputStream(inputXml));
Nodes nodes = doc.query("person");
Element homePhone = new Element("home");
homePhone.addChild(new Text("555-555-5555"));
Element workPhone = new Element("work");
workPhone.addChild(new Text("555-555-5555"));
Element phoneNumbers = new Element("phoneNumbers");
phoneNumbers.addChild(homePhone);
phoneNumbers.addChild(workPhone);
nodes[0].addChild(phoneNumbers);
System.out.println(doc.toXML()); // should print modified xml
Nathan Hughes