【问题标题】:Conversion of String to w3c.Document returns null DocumentString 到 w3c.Document 的转换返回 null Document
【发布时间】:2021-09-04 19:34:31
【问题描述】:

我通过 feign 客户端从 3rd 方 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]"

【问题讨论】:

    标签: java xml-parsing


    【解决方案1】:

    您的Document doc 不为空。 “[#document : null]”只是xercesNodeImpl.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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      • 2013-12-28
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      相关资源
      最近更新 更多