如何在java中将org.w3c.dom.Element输出为字符串格式?

85 java xml dom

我有一个org.w3c.dom.Element传递给我的方法的对象.我需要查看整个xml字符串,包括其子节点(整个对象图).我正在寻找一种方法,可以将其Element转换为我可以使用的xml格式字符串System.out.println.只是println()在'元素'对象上将无法工作,因为toString()不会输出xml格式,也不会通过其子节点.没有编写自己的方法来做到这一点有一个简单的方法吗?谢谢.

McD*_*ell 153

假设你想坚持使用标准API ......

您可以使用DOMImplementationLS:

Document document = node.getOwnerDocument();
DOMImplementationLS domImplLS = (DOMImplementationLS) document
    .getImplementation();
LSSerializer serializer = domImplLS.createLSSerializer();
String str = serializer.writeToString(node);
Run Code Online (Sandbox Code Playgroud)

如果<?xml version ="1.0"encoding ="UTF-16"?>声明困扰你,你可以改用变压器:

TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
StringWriter buffer = new StringWriter();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(node),
      new StreamResult(buffer));
String str = buffer.toString();
Run Code Online (Sandbox Code Playgroud)

  • 如果你得到[html:null]并且期望HTML,这就是解决方案.添加了此评论,以便Google可以将答案编入索引. (7认同)
  • 您仍然可以使用LSSerializer并输出"UTF-8".将LSOutput与StringWriter一起使用,并将编码类型设置为"UTF-*8" (3认同)
  • `<?xml version ="1.0"encoding ="UTF-16"?>`声明烦恼......我们也可以添加这行`serializer .getDomConfig().setParameter("xml-declaration",false);`in第一解决方案 (2认同)

Tar*_*ngh 15

简单的4行代码,String 无需xml-declaration(<?xml version="1.0" encoding="UTF-16"?>)org.w3c.dom.Element

DOMImplementationLS lsImpl = (DOMImplementationLS)node.getOwnerDocument().getImplementation().getFeature("LS", "3.0");
LSSerializer serializer = lsImpl.createLSSerializer();
serializer.getDomConfig().setParameter("xml-declaration", false); //by default its true, so set it to false to get String without xml-declaration
String str = serializer.writeToString(node);
Run Code Online (Sandbox Code Playgroud)


Kar*_*arl 2

标准 JAXP API 不支持,我使用 JDom 库来实现此目的。它有打印机功能、格式化选项等。http://www.jdom.org/