входной файл xml
<?xml version="1.0" encoding="UTF-8"?>
<response>
<message></message>
<messagecode></messagecode>
<messagedescription></messagedescription>
</response>
<response>
<message></message>
<messagecode></messagecode>
<messagedescription></messagedescription>
</response>
два ответа - корневой узел идентификатора ответа. Java-код
public void readXML(String output) {
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(output);
doc.getDocumentElement().normalize();
NodeList nodes = doc.getElementsByTagName("response");
for (int i = 0; i < nodes.getLength(); i++) {
Node nNode = nodes.item(i);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) nNode;
NodeList msg = element.getElementsByTagName("message");
Element line = (Element) msg.item(i);
System.out.println("Message: " + getCharacterDataFromElement(line));
NodeList msgcode = element.getElementsByTagName("messagecode");
line = (Element) msgcode.item(i);
System.out.println("Message Code: " + getCharacterDataFromElement(line));
NodeList msgdes = element.getElementsByTagName("messagedescription");
line = (Element) msgdes.item(i);
System.out.println("Message Description: " + getCharacterDataFromElement(line));
NodeList medialink = element.getElementsByTagName("medialink");
line = (Element) medialink.item(i);
System.out.println("Media link: " + getCharacterDataFromElement(line));
NodeList mediastatus = element.getElementsByTagName("mediastatus");
line = (Element) mediastatus.item(i);
System.out.println("Media Status: " + getCharacterDataFromElement(line));
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getCharacterDataFromElement(Element e) {
Node child = e.getFirstChild();
if (child instanceof CharacterData) {
CharacterData cd = (CharacterData) child;
return cd.getData();
}
return "";
}
Я пробую этот код, но ошибка покажет, как я могу это переделать.... SAX Exception даст ошибку в не очень образованном XML файле. как я могу прочитать два значения корневого узла в одном файле java.
Ваш XML не имеет соответствующих открывающих/закрывающих тегов или корневого узла.
Что-то вроде этого было бы достаточно:
<?xml version="1.0" encoding="UTF-8"?>
<responses>
<response>
<message></message>
<messagecode></messagecode>
<messagedescription></messagedescription>
</response>
<response>
<message></message>
<messagecode></messagecode>
<messagedescription></messagedescription>
</response>
</responses>
XML всегда должен быть хорошо сформированным, что означает, что он имеет только один корневой узел, и каждый открытый тег должен иметь закрывающий тег. Проверьте правильность синтаксиса XML на страницах W3Schools: http://www.w3schools.com/xml/xml_syntax.asp Также есть много полезной информации о создании там XML-документов.
Если тогда по какой-то причине вам абсолютно необходимо обрабатывать XML с несколькими корневыми узлами, то это, вероятно, ручное разбор с подстроками или регулярными выражениями, которые я не рекомендую.
В любом случае, если вы можете что-то сделать, попробуйте сформировать XML, чтобы у вас был только один корневой узел. Период.
<myroot><response></response><response></response></myroot>
синтаксический анализ в своем корневом узле, например <myroot><response></response><response></response></myroot>
.