如何使用dom4j将xml节点作为第一个子节点插入java中的另一个xml文档中?

时间:2011-01-12 03:41:32

标签: java xml xmldocument

在{a>中使用 insertBefore() similar post using w3c dom。我想知道如何使用dom4j。我想插入<div id="dynamicdiv"/>作为正文的第一个元素。 <html><head/><body>[<div id="dynamicdiv">] <many tags></body></html>

3 个答案:

答案 0 :(得分:1)

dom4j也支持DOM api。查看here获取相同的方法。

答案 1 :(得分:1)

谢谢Mat Banik我设法让你的另类方法工作,我发布这个让别人受益。你可以获得dom4j和w3c dom的优势。此外,内部只构造了一个树,使得print(document.asXML())包含了w3c完成的操作。

清单

package playground;

import java.io.StringReader;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.dom.DOMDocument;
import org.dom4j.dom.DOMDocumentFactory;
import org.dom4j.io.SAXReader;

public class Dom4jInsertBefore {
public static void main(String[] args) throws DocumentException {
    String newNode = "<node>value</node>"; // Convert this to XML
    String text = "<root><given></given></root>";
    // Document document = DocumentHelper.parseText(text); //type casting
    // exception will come while converting to DOMDocument 
    // use DOMDocumentFactory


    // Document newNodeDocument = DocumentHelper.parseText(newNode);

    DOMDocumentFactory factory = new DOMDocumentFactory();
    SAXReader reader2 = new SAXReader();
    reader2.setDocumentFactory(factory);
    org.dom4j.Document document = reader2.read(new StringReader(text));
    Document newNodeDocument = reader2.read(new StringReader(newNode));

    Element givenNode = document.getRootElement().element("given");
    givenNode.add(newNodeDocument.getRootElement());

    org.dom4j.dom.DOMDocument w3cDoc = (DOMDocument) document;
    org.w3c.dom.Element e = w3cDoc.createElement("div");
    e.setAttribute("id", "someattr");

    w3cDoc.getDocumentElement().getFirstChild().insertBefore(e, 
w3cDoc.getDocumentElement().getElementsByTagName("node").item(0));
    // w3cDoc.getDocumentElement().getFirstChild().appendChild(e); this works

    System.out.println(document.asXML());
}
}

输出

<?xml version="1.0" encoding="UTF-8"?>
<root><given><div id="someattr"/><node>value</node></given></root>`

答案 2 :(得分:0)

我在没有测试的情况下即时编写了这个,但我认为这应该让你开始:

import org.jdom.Attribute;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.Document;
import org.jdom.Element;

        Document document = new Document();
        Element html = new Element("html");            
        Element body = new Element("body");
        Element head = new Element("head");

        Element div = new Element("div");
        Attribute id = new Attribute("id", "dynamicdiv");
        Element moreElements = new Element("moreElements");

        document.setRootElement(html);

        div.addContent("");
        div.setAttribute(id)
        moreElements.addContent("");

        body.addContent(div);
        body.addContent(moreElements);
        html.addContent(head);
        html.addContent(body);

或者您可以使用此方法:

Node org.dom4j.dom.DOMElement.insertBefore(Node newChild, Node refChild)