Search code examples
javaxmlparsingsax

java: xml parse and get properties


I have following xml from some url

<FmicResponse xmlns="http://fmic.dat.com" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Status>OK</Status>
<EstimateId i:nil="true"/>
<FmicAllInContractCPL25>311.08533916789725</FmicAllInContractCPL25>
<FmicAllInContractCPL50>388.95855941609693</FmicAllInContractCPL50>
<FmicAllInContractCPL75>476.07103709203955</FmicAllInContractCPL75>
<FmicLineHaulContractCPL25>293.96033916789725</FmicLineHaulContractCPL25>
<FmicLineHaulContractCPL50>371.83355941609693</FmicLineHaulContractCPL50>
<FmicLineHaulContractCPL75>458.94603709203955</FmicLineHaulContractCPL75>
<FmicFsc>17.125</FmicFsc>

</FmicResponse>

I want to parse it and get properties

So my parser like this

  URL url = new URL(urlAddress);

            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(url.openStream());
           
            NodeList list = doc.getElementsByTagName("FmicResponse");

            for (int temp = 0; temp < list.getLength(); temp++) {

                Node node = list.item(temp);

                NodeList childNodes = node.getChildNodes();

                for (int cd = 0; cd < childNodes.getLength(); cd++) {
                    Node node1 = list.item(cd);
                    NamedNodeMap attributesList = node1.getAttributes();

                    for (int j = 0; j < attributesList.getLength(); j++) {
                        System.out.println("Attribute: "
                                + attributesList.item(j).getNodeName() + " = "
                                + attributesList.item(j).getNodeValue());
                    }

                }

            }

but attributes return empty or just

<FmicResponse xmlns="http://fmic.dat.com" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">

cant access to properties.

Please help


Solution

  • Use getTextContent() with ELEMENT_NODE:

        NodeList fmicResponseList = doc.getElementsByTagName("FmicResponse");
        for (int i = 0; i < fmicResponseList.getLength(); i++) {
            Node fmicResponse = fmicResponseList.item(i);
    
            NodeList childNodes = fmicResponse.getChildNodes();
            for (int cd = 0; cd < childNodes.getLength(); cd++) {
                Node child = childNodes.item(cd);
                if (child.getNodeType() == Node.ELEMENT_NODE) {
                    System.out.println(child.getNodeName() + ": " + child.getTextContent());
                }
            }
        }