【问题标题】:How to append xml nodes (as a string) into an existing XML Element node (only using java builtins)?如何将 xml 节点(作为字符串)附加到现有的 XML 元素节点(仅使用 java 内置)?
【发布时间】:2012-10-29 00:53:31
【问题描述】:

(免责声明:在 RingoJS 中使用 Rhino)

假设我有一个带有元素的文档,我不知道如何将节点作为字符串附加到该元素。为了将字符串解析为 xml 节点,然后将它们附加到节点,我尝试使用 documentFragment,但我无处可去。简而言之,我需要像 .NET 的 .innerXML 这样简单的东西,但它不在 java api 中。

var dbFactory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
var dBuilder = dbFactory.newDocumentBuilder();
var doc = dBuilder.newDocument();
var el = doc.createElement('test');
var nodesToAppend = '<foo bar="1">Hi <baz>there</baz></foo>';
el.appendChild(???);

如何在不使用任何第三方库的情况下做到这一点?

[编辑] 在示例中并不明显,但我不应该知道变量“nodesToAppend”的内容。所以,请不要向我指出有关如何在 xml 文档中创建元素的教程。

【问题讨论】:

    标签: java rhino


    【解决方案1】:

    您可以在 java 中执行此操作 - 您应该能够派生 Rhino 等价物:

    DocumentBuilderFactory dbFactory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.newDocument();
    Element el = doc.createElement('test');
    doc.appendChild(el);
    
    
    String xml = "<foo bar=\"1\">Hi <baz>there</baz></foo>";
    Document doc2 = builder.parse(new ByteArrayInputStream(xml.getBytes()));
    
    Node node = doc.importNode(doc2.getDocumentElement(), true);
    el.appendChild(node);
    

    由于docdoc2 是两个不同的Documents,因此诀窍是将节点从一个文档导入到另一个文档,这是通过上面的importNode api 完成的

    【讨论】:

    • 很好的答案,非常感谢!尝试从另一个文档中引入节点时,我错过了 importNode。抱歉,我无法给出答案,但我没有足够的声誉:-)
    【解决方案2】:

    我认为您的问题就像这个问题,并且有答案: Java: How to read and write xml files?

    或查看此链接http://www.mkyong.com/java/how-to-create-xml-file-in-java-dom/

    【讨论】:

    • 没有。我想出了如何用 java 解析 XML 文件,但在我的情况下,我坚持从字符串中附加一组元素。我尝试使用 StringReader 和 InputSource 创建另一个文档,以便将字符串用作源。但我无法将元素从一个文档移动到另一个文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    相关资源
    最近更新 更多