在Java DOM中将节点的内部XML作为String获取

Mar*_*jan 25 java xml dom

我有一个XML org.w3c.dom.Node,如下所示:

<variable name="variableName">
    <br /><strong>foo</strong> bar
</variable>
Run Code Online (Sandbox Code Playgroud)

如何将<br /><strong>foo</strong> bar零件作为String?

And*_* M. 44

同样的问题.为了解决这个问题,我编写了这个辅助函数:

public String innerXml(Node node) {
    DOMImplementationLS lsImpl = (DOMImplementationLS)node.getOwnerDocument().getImplementation().getFeature("LS", "3.0");
    LSSerializer lsSerializer = lsImpl.createLSSerializer();
    NodeList childNodes = node.getChildNodes();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < childNodes.getLength(); i++) {
       sb.append(lsSerializer.writeToString(childNodes.item(i)));
    }
    return sb.toString(); 
}
Run Code Online (Sandbox Code Playgroud)

  • 我解决了 解决方案是添加行`lsSerializer.getDomConfig().setParameter("xml-declaration",false);` (23认同)

Rob*_*ana 6

对此没有简单的方法org.w3c.dom.Node.getTextContent()给出每个子节点连接在一起的文本.getNodeValue()会给你当前节点的文本,如果它是一个Attribute,CDATAText节点.因此,您需要使用组合来序列化节点getChildNodes(),getNodeName()getNodeValue()构建字符串.

您也可以使用现有的各种XML序列化库之一来完成此操作.有XStream甚至是JAXB.这在这里讨论:Java中的XML序列化?


Luk*_*der 5

如果您使用的是jOOX,则可以将节点包装为类似于jquery的语法,然后对其进行调用toString()

$(node).toString();
Run Code Online (Sandbox Code Playgroud)

它在内部使用身份转换器,如下所示:

ByteArrayOutputStream out = new ByteArrayOutputStream();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
Source source = new DOMSource(element);
Result target = new StreamResult(out);
transformer.transform(source, target);
return out.toString();
Run Code Online (Sandbox Code Playgroud)