我有一个基本的XML文档设置:
<rss>
<channel>
</channel>
</rss>
我想将频道的新子节点添加为第一个节点,因此,假设我循环遍历一组项目,那么第一个项目将添加如下:
<rss>
<channel>
<item>Item 1</item>
</channel>
</rss>
然后下一个项目将添加如下:
<rss>
<channel>
<item>Item 2</item>
<item>Item 1</item>
</channel>
</rss>
我一直在尝试使用:
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(new File(xmlFile));
Element itemNode = doc.createElement("item");
Node channelNode = doc.getElementsByTagName("channel").item(0);
channelNode.appendChild(itemNode);
但它不断在列表底部添加新项目。
答案 0 :(得分:3)
channelNode.appendChild(itemNode);
将始终将itemNode
附加到channelNode
子项列表的末尾。这种行为在DOM Level 3规范中定义,在the JAXP documentation中定义:
节点 appendChild (节点newChild) 抛出DOMException
Adds the node newChild to the end of the list of children of this node (emphasis mine). If the newChild is already in the tree, it is first removed.
如果您需要在子节点列表的开头添加,则可以改为使用insertBefore()
API方法:
channelNode.insertBefore(itemNode, channelNode.getFirstChild());