无法在 Java 中将字符串转换为 DOM
Cannot convert String to DOM in Java
代码如下:
Response resp = tkMarC.getClock(TK_Base.Format.xml);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
String xml = resp.getBody();
System.out.println(xml);
StringReader sr = new StringReader(xml);
InputSource is = new InputSource(sr);
try {
DocumentBuilder db = dbf.newDocumentBuilder();
Document docu = db.parse(is);
if (docu != null)
{
NodeList nl = docu.getChildNodes();
for(int i=0; i<nl.getLength(); i++)
{
System.out.println(nl.item(i).toString());
}
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
这是 System.out.println(xml)
的输出
<?xml version="1.0" encoding="UTF-8"?>
<response id="-5b6df009:14ebc2afaf9:-3779">
<date>2015-07-23 14:30:25.134000</date>
<status>
<current>open</current>
<next>after</next>
<change_at>16:00:00</change_at>
</status>
<message>Market is open</message>
<unixtime>1437676225</unixtime>
</response>
然而
sr 对象总是显示:
字符流的长度为 307 但 str 为空
docu 对象总是显示:
docu = (com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl) [#document: null]
因此没有子节点是可检索的,因为这是输出的内容:
[response: null] 当代码在 i=0
上进入 for 循环时在控制台上
我在这里错过了什么?我还尝试通过 ByteArrayInputStream(xml.getBytes()); 将消息转换为字节流并将其作为输入源传递但得到了相同的结果我想我不太了解并且无法找到搜索论坛。
这是完全正常的。您的代码工作正常。您只是对元素的 toString()
感到困惑。元素的 toString()
将显示标记名称后跟节点值。对于元素,节点值为空,因此你得到 [response: null]
.
出现在NodeImpl.class:
/** NON-DOM method for debugging convenience. */
public String toString() {
return "["+getNodeName()+": "+getNodeValue()+"]";
}
因此,您正确地获得了顶级元素 response
。
代码如下:
Response resp = tkMarC.getClock(TK_Base.Format.xml);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
String xml = resp.getBody();
System.out.println(xml);
StringReader sr = new StringReader(xml);
InputSource is = new InputSource(sr);
try {
DocumentBuilder db = dbf.newDocumentBuilder();
Document docu = db.parse(is);
if (docu != null)
{
NodeList nl = docu.getChildNodes();
for(int i=0; i<nl.getLength(); i++)
{
System.out.println(nl.item(i).toString());
}
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
这是 System.out.println(xml)
的输出<?xml version="1.0" encoding="UTF-8"?>
<response id="-5b6df009:14ebc2afaf9:-3779">
<date>2015-07-23 14:30:25.134000</date>
<status>
<current>open</current>
<next>after</next>
<change_at>16:00:00</change_at>
</status>
<message>Market is open</message>
<unixtime>1437676225</unixtime>
</response>
然而 sr 对象总是显示: 字符流的长度为 307 但 str 为空 docu 对象总是显示: docu = (com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl) [#document: null]
因此没有子节点是可检索的,因为这是输出的内容: [response: null] 当代码在 i=0
上进入 for 循环时在控制台上我在这里错过了什么?我还尝试通过 ByteArrayInputStream(xml.getBytes()); 将消息转换为字节流并将其作为输入源传递但得到了相同的结果我想我不太了解并且无法找到搜索论坛。
这是完全正常的。您的代码工作正常。您只是对元素的 toString()
感到困惑。元素的 toString()
将显示标记名称后跟节点值。对于元素,节点值为空,因此你得到 [response: null]
.
出现在NodeImpl.class:
/** NON-DOM method for debugging convenience. */
public String toString() {
return "["+getNodeName()+": "+getNodeValue()+"]";
}
因此,您正确地获得了顶级元素 response
。