使用Java获取XML的特定值

问题描述 投票:0回答:2

我具有以下XML。如果EServiceId是使用Java的“ ESRVC2”,如何循环和获取Tag ClientInfo的值?

<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>
java xml dom nodelist
2个回答
0
投票

这是我尝试的答案。但是看起来它将返回所有4个ClientInfo。

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);

                    }
                }
            }
        }

0
投票

您的代码即将完成。仅需少量更改。

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

此代码需要更改。您指的是直接根标签以进行迭代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);

                }
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.