首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中将字符串XML片段转换为文档节点

在Java中将字符串XML片段转换为文档节点
EN

Stack Overflow用户
提问于 2009-04-08 11:45:19
回答 8查看 132K关注 0票数 78

在Java中,如何将表示XML片段的字符串转换为XML文档?

例如:

代码语言:javascript
复制
String newNode =  "<node>value</node>"; // Convert this to XML

然后将此节点作为给定节点的子节点插入到org.w3c.dom.Document中?

EN

回答 8

Stack Overflow用户

发布于 2009-04-08 12:02:35

代码语言:javascript
复制
Element node =  DocumentBuilderFactory
    .newInstance()
    .newDocumentBuilder()
    .parse(new ByteArrayInputStream("<node>value</node>".getBytes()))
    .getDocumentElement();
票数 66
EN

Stack Overflow用户

发布于 2009-04-08 12:05:05

您可以使用文档的 (或方法来添加XML片段:

代码语言:javascript
复制
  /**
   * @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);
  }
票数 33
EN

Stack Overflow用户

发布于 2009-04-08 13:22:59

无论如何,这里有一个我提出的使用库的解决方案。(我确实检查了它是否正常工作。)

将XML片段读入org.dom4j.Document (注意:下面使用的所有XML类都来自org.dom4j;请参阅附录):

代码语言:javascript
复制
  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。)出于测试目的,我创建了一个类似于以下内容的代码:

代码语言:javascript
复制
    Document originalDoc = 
      new SAXReader().read(new StringReader("<root><given></given></root>"));
    Element givenNode = originalDoc.getRootElement().element("given");

添加新的子元素非常简单:

代码语言:javascript
复制
    givenNode.add(newNodeDocument.getRootElement());

好了。现在输出originalDoc会产生以下结果:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>

<root>
    <given>
        <node>value</node>
    </given>
</root>

附录:因为你的问题谈到了org.w3c.dom.Document,下面是如何在它和org.dom4j.Document之间进行转换。

代码语言:javascript
复制
// 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;请阅读上面链接的问题。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/729621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档