Xml Builder с определенными тегами в java

#java #xml #dom #build

#java #xml #dom #сборка

Вопрос:

Я хотел бы создать xml со специальными тегами. Я пытался сделать это с помощью Dom, но это не сработало.

Я хотел бы создать этот XML:

 <om2m:ae xmlns:om2m="http://www.onem2m.org/xml/protocols">
    <api>app-sensor</api>
    <lbl>Type/sensor Category/temperature Location/home</lbl>
    <rr>false</rr>
</om2m:ae>
  

Как мне это сделать, что я должен использовать?

Я попробовал этот код:

  public String XMLBuilder(String process, HashMap<String, String> mapHash) {
    String returnVal = "";
    try {

        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document doc = docBuilder.newDocument();
        Element rootElement;
        if (process.equals("ae")) {
            // root elements
            rootElement = doc.createElementNS("http://www.onem2m.org/xml/protocols","m2m:ae");
            doc.appendChild(rootElement);
        } 

        Iterator it = mapHash.entrySet().iterator();

        // Fill to xml
        while (it.hasNext()) {
            Map.Entry hashList = (Map.Entry) it.next();

            Element val = doc.createElement(String.valueOf(hashList.getKey()));
            val.appendChild(doc.createTextNode(String.valueOf(hashList.getValue())));
            doc.appendChild(val);
        }
        // write the content into xml file
        DOMSource source = new DOMSource(doc);
        StringWriter writer = new StringWriter();
        StreamResult result = new StreamResult(writer);
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer transformer = tf.newTransformer();
        transformer.transform(source, result);
        returnVal = writer.toString();
        System.out.println(returnVal);

    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    } catch (TransformerConfigurationException e) {
        e.printStackTrace();
    } catch (TransformerException e) {
        e.printStackTrace();
    }
    return returnVal;
}
  

и я получаю сообщение об ошибке:

 org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR: An attempt was made to insert a node where it is not permitted. 
  

Ответ №1:

Измените doc.appendChild(val); doc.getDocumentElement().appendChild(val); , чтобы вставить вновь созданные элементы в качестве дочерних элементов корневого элемента.