我有一个XML org.w3c.dom.Node,看起来像这样:
<variable name="variableName">
<br /><strong>foo</strong> bar
</variable>
如何获取字符串形式的<br /><strong>foo</strong> bar
部件?
发布于 2011-05-10 17:57:30
同样的问题。为了解决这个问题,我编写了这个helper函数:
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();
}
发布于 2010-07-25 07:05:30
在org.w3c.dom.Node
上没有简单的方法可以做到这一点。getTextContent()
提供了连接在一起的每个子节点的文本。如果当前节点是Attribute
、CDATA
或Text
节点,则getNodeValue()
将为您提供当前节点的文本。因此,您需要使用getChildNodes()
、getNodeName()
和getNodeValue()
的组合来序列化节点来构建字符串。
您也可以使用现有的各种XML序列化库中的一个来完成此任务。有XStream
甚至是JAXB。这里讨论了这个问题:XML serialization in Java?
发布于 2012-01-22 19:19:10
如果您使用的是jOOX,则可以将节点包装在jquery-like语法中,并对其调用toString()
:
$(node).toString();
它在内部使用身份转换器,如下所示:
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();
https://stackoverflow.com/questions/3300839
复制相似问题