将字符串转换为 w3c.Document returns 空文档
Conversion of String to w3c.Document returns null Document
我通过假装客户端从第 3 方 API 获得 xml 响应 ,我在 String 中收集,然后尝试将 String 转换为 org.w3c.dom.Document.
我搜索了字符串到文档的转换代码并找到了以下链接。
- https://howtodoinjava.com/java/xml/parse-string-to-xml-dom/
- How to convert String to DOM Document object in java?
- 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]
我通过假装客户端从第 3 方 API 获得 xml 响应 ,我在 String 中收集,然后尝试将 String 转换为 org.w3c.dom.Document.
我搜索了字符串到文档的转换代码并找到了以下链接。
- https://howtodoinjava.com/java/xml/parse-string-to-xml-dom/
- How to convert String to DOM Document object in java?
- 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]