Как вставить узел XML в качестве первого потомка в другой документ XML в Java с помощью dom4j? - PullRequest
2 голосов
/ 12 января 2011

Существует аналогичное сообщение с использованием w3c dom с использованием insertBefore () в. Мне было интересно, как это сделать с помощью dom4j. Я хочу вставить <div id="dynamicdiv"/> в качестве первого элемента тела. <html><head/><body>[<div id="dynamicdiv">] <many tags></body></html>

Ответы [ 3 ]

1 голос
/ 13 января 2011

Спасибо Мат Баник Мне удалось получить ваш альтернативный подход к работе, я публикую это для других, чтобы получить выгоду.Вы можете получить преимущество как от 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>`
1 голос
/ 12 января 2011

dom4j также поддерживает DOM API.Посмотрите здесь для того же метода.

0 голосов
/ 12 января 2011

Я написал это на лету без тестирования, но я думаю, что это должно помочь вам начать:

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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...