在Java中,如何将表示XML片段的字符串转换为XML文档?
例如:
String newNode = "<node>value</node>"; // Convert this to XML
然后将此节点作为给定节点的子节点插入到org.w3c.dom.Document中?
发布于 2009-04-08 12:02:35
Element node = DocumentBuilderFactory
.newInstance()
.newDocumentBuilder()
.parse(new ByteArrayInputStream("<node>value</node>".getBytes()))
.getDocumentElement();
发布于 2009-04-08 12:05:05
您可以使用文档的 (或方法来添加XML片段:
/**
* @param docBuilder
* the parser
* @param parent
* node to add fragment to
* @param fragment
* a well formed XML fragment
*/
public static void appendXmlFragment(
DocumentBuilder docBuilder, Node parent,
String fragment) throws IOException, SAXException {
Document doc = parent.getOwnerDocument();
Node fragmentNode = docBuilder.parse(
new InputSource(new StringReader(fragment)))
.getDocumentElement();
fragmentNode = doc.importNode(fragmentNode, true);
parent.appendChild(fragmentNode);
}
发布于 2009-04-08 13:22:59
无论如何,这里有一个我提出的使用库的解决方案。(我确实检查了它是否正常工作。)
将XML片段读入org.dom4j.Document
(注意:下面使用的所有XML类都来自org.dom4j;请参阅附录):
String newNode = "<node>value</node>"; // Convert this to XML
SAXReader reader = new SAXReader();
Document newNodeDocument = reader.read(new StringReader(newNode));
然后获取插入新节点的文档以及其中的父元素(要插入的)。(您的org.w3c.dom.Document需要在此处转换为org.dom4j.Document。)出于测试目的,我创建了一个类似于以下内容的代码:
Document originalDoc =
new SAXReader().read(new StringReader("<root><given></given></root>"));
Element givenNode = originalDoc.getRootElement().element("given");
添加新的子元素非常简单:
givenNode.add(newNodeDocument.getRootElement());
好了。现在输出originalDoc
会产生以下结果:
<?xml version="1.0" encoding="utf-8"?>
<root>
<given>
<node>value</node>
</given>
</root>
附录:因为你的问题谈到了org.w3c.dom.Document
,下面是如何在它和org.dom4j.Document
之间进行转换。
// dom4j -> w3c
DOMWriter writer = new DOMWriter();
org.w3c.dom.Document w3cDoc = writer.write(dom4jDoc);
// w3c -> dom4j
DOMReader reader = new DOMReader();
Document dom4jDoc = reader.read(w3cDoc);
(如果您经常需要这两种Document
,那么将它们放在整洁的实用方法中可能更有意义,比如放在一个名为XMLUtils
的类中或类似的类中。)
也许有更好的方法可以做到这一点,即使没有任何第三方库。但是在我看来,在到目前为止提出的解决方案中,这是最简单的方法,即使您需要进行dom4j <-> w3c转换。
更新 (2011):在将dom4j依赖项添加到代码之前,请注意it is an actively maintained project, and has some other problems too。改进的2.0版本已经酝酿了很长时间,但现在只有一个alpha版本可用。您可能想要考虑一种替代方案,如XOM;请阅读上面链接的问题。
https://stackoverflow.com/questions/729621
复制相似问题