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; } s+=">"; 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”是可选的