Java文档生成器为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

我已经在Stackoverflow上尝试了所有可能的方法,但我无法解决这个问题

我将以下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>";
我已尝试将文档替换为:

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