Я пробовал все возможное answers на Stackoverflow, но я не могу решить эту проблему.Java Document builder возвращает null Документ для Xml String
У меня есть следующие 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 !!
Я обращаюсь к вам за помощью.
UPDATE:
Вот полный код, который берет выше 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.e его вообще не входит в цикл.
Что * точно * вы имеете в виду под "нулевой документ"? Вы просто полагаетесь на результат 'document.toString()'? –
Я отправлю точную ошибку за секунду. – WowBow
Если вы могли бы переписать вопрос в качестве [mcve], который действительно помог бы ... –