java - 在 dom 树的第一个 child 之前添加一个新节点

标签 java xml dom4j

这可能是最容易处理的事情之一,但出于某种原因对我不起作用。我正在尝试在 dom 树的根之后添加一个新节点。
这是原始字符串:

<div class="discussionThread dt"><div class="dt_subject">2011 IS HERE!</div></div>

我想在 之前添加一个字符串形式的新节点。最终版本应该是这样的:

<div class="discussionThread dt"><div class="test">Test Val</div><div class="dt_subject">2011 IS HERE!</div></div>

如您所见,新的 Test Val 被添加到根 div 类之后。我使用了几种方法将节点放置在正确的位置,但它被附加在最后。

这是我从之前的一篇帖子中引用的示例:

String newNode = "<div class="test">test</div>";
SAXReader reader = new SAXReader();
Document newNodeDocument = reader.read(new StringReader(newNode));
Document originalDoc = new SAXReader().read(new StringReader(content));
Element root = originalDoc.getRootElement();
Element givenNode = originalDoc.getRootElement(); 
givenNode.add(newNodeDocument.getRootElement());

这导致节点被添加到最后。我尝试使用 insertBefore(),但没有成功。

任何指点将不胜感激。

谢谢

最佳答案

为什么要创建一个新的 Document 或一个新的根 Element?我认为最短的方法是使用 Branch#content:

Returns the content nodes of this branch as a backed List so that the content of this branch may be modified directly using the interface. The List is backed by the Branch so that changes to the list are reflected in the branch and vice versa.

你只需要创建新的元素,并通过 content 方法提供的 List 将它添加到根元素(将位置索引传递给它),这是我的主要:

public static void main(String[] args) throws DocumentException {

    SAXReader reader = new SAXReader();
    String xml = "<div class=\"discussionThread dt\"><div class=\"dt_subject\">2011 IS HERE!</div></div>";
    Document document = reader.read(new StringReader(xml));

    DefaultElement newElement = new DefaultElement("div");
    newElement.addAttribute("class", "test");
    newElement.add(new DefaultText("Test Val"));

    List content = document.getRootElement().content();
    if (content != null ) {
        content.add(0, newElement);
    }

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

它打印出以下 xml:

<div class="discussionThread dt"><div class="test">Test Val</div><div class="dt_subject">2011 IS HERE!</div></div>

另外,在必须转换xml的时候,还应该考虑使用xslt。

关于java - 在 dom 树的第一个 child 之前添加一个新节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5572029/

相关文章:

java - 如何检查Map是否有重复的key?

java - 将记录保存在 json 中附加它们并解析

xml - xPath-节点不存在时返回默认值?

java - 在 dom4j 中指定 XML 路径

java - Apache-POI 生成 8kb 的小工作簿,需要几分钟才能完成

java - 我需要一个可以通过滑动来更改的图标列表,这样整个内容就会改变

c# - 调整 MVC 4 WebApi XmlSerializer 丢失 nameSpace

javascript - 文本相对于 SVG 中的父 G 右对齐

Java 和 dom (org.dom4j)

java - 通过dom4j解析xml文件