簡體   English   中英

如何使用Java讀取XML響應

[英]How to Read XML Response using Java

我正在調用Web服務,並以XML格式獲取響應。 這是XML響應,

<Response>
    <NO>1</NO>
    <NAME>John Doe</NAME>
</Response>
<Response>
    <NO>2</NO>
    <NAME>Jane Doe</NAME>
</Response>

我試圖從每個響應中獲取每個數據。 我需要獲取每個值。

這是我的Java代碼,

Document document = DocumentBuilderFactory
                    .newInstance()
                    .newDocumentBuilder()
                    .parse(new InputSource(new StringReader(response.toString())));

            NodeList nodeList = document.getElementsByTagName("Response");
            System.out.println(nodeList.getLength());

            for (int i = 0; i < nodeList.getLength(); i++) {
                Node node = nodeList.item(i);

                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    Element element = (Element) node;

                    NodeList id = (NodeList) element.getElementsByTagName("Response");
                    System.out.println(id);
                    NodeList nodeLists = element.getChildNodes();

                    for (int j = 0; j < nodeLists.getLength(); j++) {
                        Node n = nodeLists.item(j);

                        if (n.getNodeType() == Node.ELEMENT_NODE) {
                            Element name = (Element) n;
                            System.out.println(name.getAttributes().getNamedItem("NO").getNodeValue());
                            System.out.println(name.getAttributes().getNamedItem("NAME").getNodeValue());
                        }
                    }
                }
            }

但是我不能得到我所需要的。 什么都沒打印。

我需要像這樣打印每個值,

1
John Doe
2
Jane Doe

基本上,它需要遍歷所有<Response>標簽並為我提供可用數據。 但是我的代碼不起作用。

那么有人可以幫助我嗎? 非常感謝。

我從不從事XML解析工作,但是當我在計算機上調試您的代碼時,出現類似以下錯誤:

[Fatal Error] :1:84: The markup in the document following the root element must be well-formed.
Exception in thread "main" org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 84; The markup in the document following the root element must be well-formed.
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
    at com.flotomate.fd.system.etc.OprUtility.main(OprUtility.java:87)

並在StackOverflow上搜索是什么原因導致我出錯我找到了這個答案

問題不是根元素已添加。

我添加根元素后仍然無法修復。 所以我遵循與答案相同的模式

不確定優化和定義良好,但可以正常工作

String response = " <root>"
                      +"   <Response>  "
                      + "       <NO>1</NO>  "
                      + "       <NAME>John Doe</NAME>  " 
                      + "   </Response>  " 
                      + "   <Response>  "
                      + "       <NO>2</NO>  " 
                      + "       <NAME>Jane Doe</NAME>  " 
                      + "  </Response>  "
                      + "</root>";
    Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(
            new InputSource(new StringReader(response.toString())));

    NodeList nodeList = document.getDocumentElement().getChildNodes();

    for (int i = 0; i < nodeList.getLength(); i++) {
    Node node = nodeList.item(i);
    if (node.getNodeType() == Node.ELEMENT_NODE) {
        Element element = (Element) node;
        if (element.getNodeName().contains("Response")) {
            System.out.println(element.getElementsByTagName("NO").item(0).getTextContent());
            System.out.println(element.getElementsByTagName("NAME").item(0).getTextContent());
        }
    }
}

    //And from this also.....
    for (int i = 0; i < nodeList.getLength(); i++) {
        Element element1 = (Element) nodeList.item(i);
                System.out.println(element.getElementsByTagName("NO").item(0).getTextContent());
                System.out.println(element.getElementsByTagName("NAME").item(0).getTextContent());
    }

輸出:

1
John Doe
2
Jane Doe
NodeList id = (NodeList) element.getElementsByTagName("Response");

這將為您提供帶有標記名Response的所有元素的節點列表。 但是您在下面的代碼中沒有使用此節點列表。 而是您在element.getChildNodes()上進行迭代。 您應該在id上進行迭代,或更具體地說, id是您所需的節點列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM