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