[JAXP] inserer un element à partir d'un autre document
salut
je voudrait inserer un element d'un docment X dans un document Y
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class ElementTest {
/**
* @param args
* @throws ParserConfigurationException
* @throws TransformerException
*/
public static void main(String[] args) {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder documentBuilder;
try {
documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.newDocument();
Element e = JAXPutilities.createElement("ab");
Element e1 = JAXPutilities.createElement("aa");
Element e2 = JAXPutilities.createElement("bb");
document.appendChild(e);
System.out.println("docum=" + JAXPutilities.xmlToString(document));
} catch (ParserConfigurationException e3) {
System.out.println("ParserConfigurationException");
e3.printStackTrace();
} catch (TransformerException e) {
System.out.println("TransformerException");
e.printStackTrace();
}
}
} |
la methode createElement:
Code:
1 2 3 4 5 6 7 8 9 10 11
|
public static Element createElement(String elementName) throws ParserConfigurationException
{
DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = null;
documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document=documentBuilder.newDocument();
Element element =document.createElement(elementName);
return element;
} |
j'obtient l'erreur suivante:
Code:
1 2 3 4 5 6 7
|
Exception in thread "main" org.w3c.dom.DOMException: DOM005 Wrong document
at org.apache.xerces.dom.ParentNode.internalInsertBefore(ParentNode.java:393)
at org.apache.xerces.dom.ParentNode.insertBefore(ParentNode.java:325)
at org.apache.xerces.dom.DocumentImpl.insertBefore(DocumentImpl.java:410)
at org.apache.xerces.dom.NodeImpl.appendChild(NodeImpl.java:226)
at ElementTest.main(ElementTest.java:26) |
apres des recherches, j'ai trouvé qu'il faut utiliser importNode au lieu de appendChild
Avec importNode, pas d'erreur mais l'element n'est pas ajouté:
j'obtien en executant:
Code:
docum=<?xml version="1.0" encoding="UTF-8"?>