读取有2个根节点的xml文件?

时间:2014-07-30 10:06:50

标签: java xml dom

输入文件 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文件中读取两个根节点值..

2 个答案:

答案 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,这样你只有一个根节点。周期。