有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

输入文件 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) 个答案

  1. # 1 楼答案

    XML应该总是格式良好的,这意味着它只有一个根节点每个开始标记都应该有一个结束标记。检查W3Schools页面中的XML语法是否正确:http://www.w3schools.com/xml/xml_syntax.asp这里还有许多关于构建XML文档的其他有用信息

    如果出于某种原因,您绝对需要处理具有多个根节点的XML,那么可能需要使用子字符串正则表达式进行手动解析,我不建议这样做

    不管是哪种方式,如果你能做些什么,试着形成XML,这样你只有一个根节点。句号

  2. # 2 楼答案

    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>