输入文件 xml
<?xml version="1.0" encoding="UTF-8"?>
<response>
<message></message>
<messagecode></messagecode>
<messagedescription></messagedescription>
</response>
<response>
<message></message>
<messagecode></messagecode>
<messagedescription></messagedescription>
</response>
两个回应 -
响应id根节点..
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异常将在格式不正确的xml文件中出错。 我怎样才能在同一个java文件中读取两个根节点值..
答案 0 :(得分:1)
您的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>
答案 1 :(得分:0)
XML应始终格式正确,这意味着它只有只有一个根节点,并且每个开始标记都应该有一个结束标记。从W3Schools页面检查正确的XML语法:http://www.w3schools.com/xml/xml_syntax.asp还有许多关于在那里构建XML文档的其他有用信息。
如果由于某种原因您绝对需要处理具有多个根节点的XML,那么它可能是使用子串或正则表达式进行手动解析,我不建议这样做
无论哪种方式,如果你可以对它做些什么,尝试形成XML,这样你只有一个根节点。周期。