我有一个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)
对此没有简单的方法org.w3c.dom.Node.getTextContent()给出每个子节点连接在一起的文本.getNodeValue()会给你当前节点的文本,如果它是一个Attribute,CDATA或Text节点.因此,您需要使用组合来序列化节点getChildNodes(),getNodeName()并getNodeValue()构建字符串.
您也可以使用现有的各种XML序列化库之一来完成此操作.有XStream甚至是JAXB.这在这里讨论:Java中的XML序列化?
如果您使用的是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)
| 归档时间: |
|
| 查看次数: |
25178 次 |
| 最近记录: |