Получите определенное значение XML, используя java - PullRequest
0 голосов
/ 27 мая 2020

У меня есть XML следующего вида. Как я могу l oop и получить значения тега ClientInfo, если EServiceId равен «ESRVC2», используя Java?

<EServiceInfo>
    <EServiceId>ESRVC1</EServiceId>
    <Clients>
        <ClientInfo>
            <ClientEntityID>T1511111F</ClientEntityID>
            <ClientEntityType>UEN</ClientEntityType>
        </ClientInfo>
        <ClientInfo>
            <ClientEntityID>190000001W</ClientEntityID>
            <ClientEntityType>UEN</ClientEntityType>
        </ClientInfo>
    </Clients>
</EServiceInfo>
<EServiceInfo>
    <EServiceId>ESRVC2</EServiceId>
    <Clients>
        <ClientInfo>
            <ClientEntityID>T1522222F</ClientEntityID>
            <ClientEntityType>UEN</ClientEntityType>
        </ClientInfo>
        <ClientInfo>
            <ClientEntityID>190000002W</ClientEntityID>
            <ClientEntityType>UEN</ClientEntityType>
        </ClientInfo>
    </Clients>
</EServiceInfo>

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Ваш код почти готов. Требуется лишь несколько изменений.

NodeList nClientList = doc.getElementsByTagName("ClientInfo");

Этот код необходимо изменить. Вы ссылаетесь на прямой тег root на итерацию ClientInfo, поэтому, какое бы условие вы ни выбрали, процесс итерации продолжается со всем тегом ClientInfo. Измените doc на elem

NodeList nClientList = elem.getElementsByTagName("ClientInfo");

Затем заключите оставшуюся часть итерации в условный блок.

if (nEServiceId.equals("ESRVC2")) {
  //ClientInfo iteration logic
}

Вот полный код этих изменений.

NodeList nEserviceInfoList = doc.getElementsByTagName("EServiceInfo");
for (int i = 0; i < nEserviceInfoList.getLength(); i++) {
    Node nNode = nEserviceInfoList.item(i);
    if (nNode.getNodeType() == Node.ELEMENT_NODE) {
        Element elem = (Element) nNode;
        Node node1 = elem.getElementsByTagName("EServiceId").item(0);
        String nEServiceId = node1.getTextContent();

        NodeList nClientList = elem.getElementsByTagName("ClientInfo");

        if (nEServiceId.equals("ESRVC2")) {
            System.out.println("EServiceId: " + nEServiceId);
            for (int j = 0; j < nClientList.getLength(); j++) {

                Node nClientNode = nClientList.item(j);

                System.out.println("\nCurrent Element: " + nClientNode.getNodeName());
                if (nClientNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element elemClient = (Element) nClientNode;
                    Node node3 = elemClient.getElementsByTagName("ClientEntityID").item(0);
                    String nClientEntityID = node3.getTextContent();

                    Node node4 = elemClient.getElementsByTagName("ClientEntityType").item(0);
                    String nClientEntityType = node4.getTextContent();

                    System.out.println("ClientEntityID: " + nClientEntityID);
                    System.out.println("ClientEntityType: " + nClientEntityType);

                }
            }
        }
    }
}
0 голосов
/ 28 мая 2020

Вот ответ, который я попробовал. Но похоже, что он вернет все 4 ClientInfos.

NodeList nEserviceInfoList = doc.getElementsByTagName("EServiceInfo");
        for (int i = 0; i < nEserviceInfoList.getLength(); i++) {

            Node nNode = nEserviceInfoList.item(i);
            System.out.println("\nCurrent Element: " + nNode.getNodeName());

            if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                Element elem = (Element) nNode;
                Node node1 = elem.getElementsByTagName("EServiceId").item(0);
                String nEServiceId = node1.getTextContent();

                System.out.println("EServiceId: " + nEServiceId);

                NodeList nClientList = doc.getElementsByTagName("ClientInfo");

                for (int j = 0; j < nClientList.getLength(); j++) {

                    Node nClientNode = nClientList.item(j);

                    System.out.println("\nCurrent Element: " + nClientNode.getNodeName());
                    if (nClientNode.getNodeType() == Node.ELEMENT_NODE) {
                        Element elemClient = (Element) nClientNode;
                        Node node3 = elemClient.getElementsByTagName("ClientEntityID").item(0);
                        String nClientEntityID = node3.getTextContent();

                        Node node4 = elemClient.getElementsByTagName("ClientEntityType").item(0);
                        String nClientEntityType = node4.getTextContent();

                        System.out.println("ClientEntityID: "+ nClientEntityID);
                        System.out.println("ClientEntityType: "+ nClientEntityType);

                    }
                }
            }
        }
...