【发布时间】:2017-01-19 21:53:09
【问题描述】:
我已经在 Stackoverflow 上尝试了所有可能的answers,但我无法解决这个问题。
我有以下 xml 作为字符串:
private static final String xmlStr = "<parameters>\n" +
" <parameter>\n" +
" <name>emp</name>\n" +
" <keyvalue>John Smith</keyvalue>\n" +
" </parameter>\n" +
" <parameter>\n" +
" <name>age</name>\n" +
" <keyvalue>22</keyvalue>\n" +
" </parameter>\n" +
" <parameter>\n" +
" <name>Birth Date</name>\n" +
" <keyvalue>02/05/1978</keyvalue>\n" +
" </parameter>\n" +
" <parameter>\n" +
" <name>password</name>\n" +
" <keyvalue>ye63633</keyvalue>\n" +
" </parameter>\n" +
"</parameters>";
参数可以替换成任意字符串(我试过没有成功),下面的代码返回空文档:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new ByteArrayInputStream(xmlStr.getBytes("UTF-8")));
我尝试将文档替换为:
Document document = builder.parse(new InputSource(new StringReader(xmlStr)));//This used to work 2 weeks ago.
document 一直在返回空文档,我不知道我做错了什么。几周前使用相同的代码。
我使用的是 Java 1.8 !!
感谢您的帮助。
更新:
这是采用上述 xmlStr 并尝试访问员工年龄的完整代码。
private String getElementValue(String tagName, String xmlString) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(xmlString)));
Element rootElement = document.getDocumentElement();
NodeList list = rootElement.getElementsByTagName(tagName);
if (list != null && list.getLength() > 0) {
NodeList subList = list.item(0).getChildNodes();
if (subList != null && subList.getLength() > 0) {
return subList.item(0).getNodeValue();
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
根据 cmets,文档根本不为空,但访问所需的 xml 标记时存在问题。所以代码NodeList list = rootElement.getElementsByTagName("age");
大小为 0。即它根本没有进入循环。
【问题讨论】:
-
“空文档”究竟是什么意思?你只是依赖
document.toString()的结果吗? -
我会在一秒钟内发布确切的错误。
-
如果您可以将问题改写为minimal reproducible example,那真的很有帮助...
-
@JonSkeet 我对此感到满意。我忘了输入确切的错误。我现在放一个截图。让我知道它是否还需要更多信息。谢谢!
-
我没有看到任何错误。我看到一个包含文本“null”的
toString()结果,但这绝对不是错误。您是否尝试过实际使用该文档?请注意,调试器显示 39 个节点...
标签: java xml parsing xml-parsing xmldocument