将字符串转换为 w3c.Document returns 空文档

Conversion of String to w3c.Document returns null Document

我通过假装客户端从第 3 方 API 获得 xml 响应 ,我在 String 中收集,然后尝试将 String 转换为 org.w3c.dom.Document.

我搜索了字符串到文档的转换代码并找到了以下链接。

  1. https://howtodoinjava.com/java/xml/parse-string-to-xml-dom/
  2. How to convert String to DOM Document object in java?
  3. https://www.journaldev.com/1237/java-convert-string-to-xml-document-and-xml-document-to-string

问题是我的转换逻辑不工作并且 Document = null。

 public static void main(String[] args) {
        final String xmlStr = "<Emp id=\"1\"><name>Pankaj</name><age>25</age>\n"+
                "<role>Developer</role><gen>Male</gen></Emp>";

        Document doc = convertStringToXMLDocument(xmlStr);
 }
 private static Document convertStringToXMLDocument(String xmlString)
    {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder;
        try
        {
            builder = factory.newDocumentBuilder();
            Document doc = builder.parse(new InputSource(new StringReader(xmlString)));
            return doc;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

我试过 builder.parse() 的调试代码,但找不到文档转换为空的原因。

Output: doc: "[#document : null]"

您的 Document doc 不为空。 “[#document : null]”只是 xerces NodeImpl.toString 的输出。它的意思是[元素名称或元素类型:元素值]。所以 [#document : null] 表示文档元素:没有直接值。这是真的,因为只有文本节点有直接值。

您将能够遍历 Document doc 并获取所有子节点(元素节点以及文本节点),如下所示:

import java.io.StringReader;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;

public class DocumentBuilderTest {
    
 public static void main(String[] args) {
  final String xmlStr = "<Emp id=\"1\"><name>Pankaj</name><age>25</age>\n"+
                        "<role>Developer</role><gen>Male</gen></Emp>";
  Document doc = convertStringToXMLDocument(xmlStr);
  printAllChildNodes(doc);
 }
 
 public static void printAllChildNodes(Node node) {
  System.out.println(node);

  NodeList nodeList = node.getChildNodes();
  for (int i = 0; i < nodeList.getLength(); i++) {
   Node currentNode = nodeList.item(i);
   printAllChildNodes(currentNode);
  }
 }
 
 private static Document convertStringToXMLDocument(String xmlString) {
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder builder;
  try {
   builder = factory.newDocumentBuilder();
   Document doc = builder.parse(new InputSource(new StringReader(xmlString)));
   return doc;
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }
}

这会打印:

[#document: null]
[Emp: null]
[name: null]
[#text: Pankaj]
[age: null]
[#text: 25]
[#text:
]
[role: null]
[#text: Developer]
[gen: null]
[#text: Male]