Java文档生成器为Xml字符串返回空文档
我已经在Stackoverflow上尝试了所有可能的方法,但我无法解决这个问题 我将以下xml作为字符串:Java文档生成器为Xml字符串返回空文档,java,xml,parsing,xml-parsing,xmldocument,Java,Xml,Parsing,Xml Parsing,Xmldocument,我已经在Stackoverflow上尝试了所有可能的方法,但我无法解决这个问题 我将以下xml作为字符串: private static final String xmlStr = "<parameters>\n" + " <parameter>\n" + " <name>emp</name>\n" + " <keyvalue>John Smith&l
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>";
我已尝试将文档替换为:
Document document = builder.parse(new InputSource(new StringReader(xmlStr)));//This used to work 2 weeks ago.
文档总是返回空文档,我不知道我做错了什么。与几周前工作时使用的代码相同
我正在使用Java1.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;
}
根据注释,文档根本不是空的,但是访问所需的xml标记时出现问题。因此代码NodeList list=rootElement.getElementsByTagName(“age”)代码>
大小为0。i、 它根本没有进入循环。它似乎工作正常。在builder.parse
之后添加的以下代码显示正在解析XML:
System.out.println("Root element: " + document.getDocumentElement().getNodeName());
NodeList nodeList = document.getElementsByTagName("parameter");
for (int temp = 0; temp < nodeList.getLength(); temp++) {
org.w3c.dom.Node node = nodeList.item(temp);
System.out.println("\nCurrent element: " + node.getNodeName());
if (node.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
Element element = (Element) node;
System.out.println("Name: " + element.getElementsByTagName("name").item(0).getTextContent());
System.out.println("Key Value: " + element.getElementsByTagName("keyvalue").item(0).getTextContent());
}
}
“空文档”到底是什么意思?你仅仅依赖于document.toString()
的结果吗?我会在一秒钟内公布确切的错误。如果你能把问题改写成一个答案,那将真的很有帮助…@JonSkeet我很高兴。我忘了说出准确的错误。我现在放了一张截图。如果还需要更多信息,请告诉我。谢谢我没有看到任何错误。我看到一个包含文本“null”的toString()
结果,但这绝对不是错误。您是否尝试过实际使用该文档?请注意,调试器显示了39个节点。。。
System.out.println("Root element: " + document.getDocumentElement().getNodeName());
NodeList nodeList = document.getElementsByTagName("parameter");
for (int temp = 0; temp < nodeList.getLength(); temp++) {
org.w3c.dom.Node node = nodeList.item(temp);
System.out.println("\nCurrent element: " + node.getNodeName());
if (node.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
Element element = (Element) node;
System.out.println("Name: " + element.getElementsByTagName("name").item(0).getTextContent());
System.out.println("Key Value: " + element.getElementsByTagName("keyvalue").item(0).getTextContent());
}
}
Root element: parameters
Current element: parameter
Name: emp
Key Value: John Smith
Current element: parameter
Name: age
Key Value: 22
Current element: parameter
Name: Birth Date
Key Value: 02/05/1978
Current element: parameter
Name: password
Key Value: ye63633