在 Java DOM 中将节点的内部 XML 作为字符串获取

2022-09-01 16:42:41

我有一个XML org.w3c.dom.Node,看起来像这样:

<variable name="variableName">
    <br /><strong>foo</strong> bar
</variable>

如何将零件作为字符串获取?<br /><strong>foo</strong> bar


答案 1

同样的问题。为了解决这个问题,我编写了这个帮助程序函数:

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(); 
}

答案 2

对此没有简单的方法。 给出连接在一起的每个子节点的文本。 将为您提供当前节点的文本(如果它是 、 或 节点)。因此,您需要使用 的组合序列化节点,并生成字符串。org.w3c.dom.NodegetTextContent()getNodeValue()AttributeCDATATextgetChildNodes()getNodeName()getNodeValue()

还可以使用现有的各种 XML 序列化库之一执行此操作。有甚至JAXB。这里讨论的是:Java中的XML序列化?XStream