Java / DOM:获取节点的XML内容

我正在使用W3C DOM解析Java中的XML文件。 我陷入了一个特定的问题,我无法弄清楚如何获得一个节点的整个内部XML。

该节点看起来像这样:

this is a test 

我必须使用什么function来实现:

 "this is a test" 

您必须使用节点作为要转换的节点使用transform / xslt API并将结果放入新的StreamResult(new StringWriter()); 。 请参阅how-to-pretty-print-xml-from-java

我知道这很久以前就被问过,但对于下一个搜索的人(今天是我),这适用于JDOM:

 JDOMXPath xpath = new JDOMXPath("/td"); String innerXml = (new XMLOutputter()).outputString(xpath.selectNodes(document)); 

这会将所有子节点的列表传递给outputString,这将按顺序将它们序列化。

你怎么说这个? 我今天在android上遇到了同样的问题,但我设法做了简单的“序列化”

 private String innerXml(Node node){ String s = ""; NodeList childs = node.getChildNodes(); for( int i = 0;i"; return s; } 

呃…您也可以调用toString(),只需手动或使用正则表达式来切断开始和结束标记。

编辑:toString()不能达到我的预期。 拉出O’Reilly Java&XML一书讲述了Java DOM的加载和保存模块。

特别参见看起来非常有前景的LSSerializer 。 您可以调用writeToString(节点)并按照我的建议切断开始和结束标记,或尝试使用LSSerializerFilter不打印顶部节点标记(不确定这是否有用;我承认我以前从未使用过LSSerializer 。)

阅读O’Reilly的书似乎表明做了这样的事情:

  DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance(); DOMImplementationLS lsImpl = (DOMImplementationLS)registry.getDOMImplementation("LS"); LSSerializer serializer = lsImpl.createLSSerializer(); String nodeString = serializer.writeToString(node); 

node.getTextContent();

您应该使用DomomJ的JDom来处理节点,如果没有其他原因,可以正确处理空白。

要删除不必要的标签,可能会使用以下代码:

DOMConfiguration config = serializer.getDomConfig(); config.setParameter(“canonical-form”,true);

但它并不总是有效,因为“canonical-form = true”是可选的