Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>You can use the JAXB <a href="http://download.oracle.com/javase/6/docs/api/javax/xml/bind/Binder.html" rel="noreferrer"><code>Binder</code></a> for this use case:</p> <p><strong>input.xml</strong></p> <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;customer&gt; &lt;UNMAPPED_ELEMENT_1/&gt; &lt;name&gt;Jane Doe&lt;/name&gt; &lt;!-- COMMENT #1 --&gt; &lt;address&gt; &lt;UNMAPPED_ELEMENT_2/&gt; &lt;street&gt;1 A Street&lt;/street&gt; &lt;!-- COMMENT #2 --&gt; &lt;UNMAPPED_ELEMENT_3/&gt; &lt;city&gt;Any Town&lt;/city&gt; &lt;/address&gt; &lt;!-- COMMENT #3 --&gt; &lt;UNMAPPED_ELEMENT_4/&gt; &lt;phone-number type="home"&gt;555-HOME&lt;/phone-number&gt; &lt;!-- COMMENT #4 --&gt; &lt;phone-number type="cell"&gt;555-CELL&lt;/phone-number&gt; &lt;UNMAPPED_ELEMENT_5/&gt; &lt;!-- COMMENT #5 --&gt; &lt;/customer&gt; </code></pre> <p><strong>Demo</strong></p> <pre><code>import java.io.File; import javax.xml.bind.*; import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.*; public class BinderDemo { public static void main(String[] args) throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); File xml = new File("input.xml"); Document document = db.parse(xml); JAXBContext jc = JAXBContext.newInstance(Customer.class); Binder&lt;Node&gt; binder = jc.createBinder(); Customer customer = (Customer) binder.unmarshal(document); customer.getAddress().setStreet("2 NEW STREET"); PhoneNumber workPhone = new PhoneNumber(); workPhone.setType("work"); workPhone.setValue("555-WORK"); customer.getPhoneNumbers().add(workPhone); binder.updateXML(customer); TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = tf.newTransformer(); t.transform(new DOMSource(document), new StreamResult(System.out)); } } </code></pre> <p><strong>Output</strong></p> <pre><code>&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt; &lt;customer&gt; &lt;UNMAPPED_ELEMENT_1/&gt; &lt;name&gt;Jane Doe&lt;/name&gt; &lt;!-- COMMENT #1 --&gt; &lt;address&gt; &lt;UNMAPPED_ELEMENT_2/&gt; &lt;street&gt;2 NEW STREET&lt;/street&gt; &lt;!-- COMMENT #2 --&gt; &lt;UNMAPPED_ELEMENT_3/&gt; &lt;city&gt;Any Town&lt;/city&gt; &lt;/address&gt; &lt;!-- COMMENT #3 --&gt; &lt;UNMAPPED_ELEMENT_4/&gt; &lt;phone-number type="home"&gt;555-HOME&lt;/phone-number&gt; &lt;!-- COMMENT #4 --&gt; &lt;phone-number type="cell"&gt;555-CELL&lt;/phone-number&gt; &lt;phone-number type="work"&gt;555-WORK&lt;/phone-number&gt; &lt;UNMAPPED_ELEMENT_5/&gt; &lt;!-- COMMENT #5 --&gt; &lt;/customer&gt; </code></pre> <p><strong>For More Information</strong></p> <ul> <li><a href="http://bdoughan.blogspot.com/2010/09/jaxb-xml-infoset-preservation.html" rel="noreferrer">http://bdoughan.blogspot.com/2010/09/jaxb-xml-infoset-preservation.html</a></li> </ul>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload