java - 如何读取多个子节点并获取值

标签 java xml dom

这是我要解析的 Xml

  </Worker><Worker>
    <Employee_ID>12349294</Employee_ID>
    <Position_ID>50099501</Position_ID>
    <Process>
        <Bp_Type>Hire</Bp_Type>
        <Status>Pass</Status>
    </Process>
    <Process>
        <Bp_Type>Leave of Absence</Bp_Type>
        <Status>Fail</Status>
        <Fault_String>Validation error occurred. Invalid ID value.  'LEAVE_TYPE_ACCOMODATION_ACCOMODATION' is not a valid ID value for type = 'Leave_of_Absence_Type_ID'</Fault_String>
    </Process>

    <Process>
        <Bp_Type>Non Effective Dated Worker Additional Data</Bp_Type>
        <Status>Pass</Status>
    </Process>

    </Worker><Worker>
    <Worker>
    <Employee_ID>12349386</Employee_ID>
    <Position_ID>50279490</Position_ID>
    <Process>
        <Bp_Type>Hire</Bp_Type>
        <Status>Fail</Status>
        <Fault_String>Validation error occurred. You can't assign a Military Status to a worker when their Hire Date is before the Effective Date of the Location</Fault_String>
    </Process>
    /Worker>

这里我尝试根据 Status 解析 xml 文件。我需要收集所有“失败”状态,即我正在检查下面的代码。它适用于第二个节点,但不适用于有两个子节点的第一个节点。任何建议都会有帮助

 for(int i=0;i<sourceDir.length;i++){
 Document doc = docBuilder.parse(sourceDir[i]);

 // normalize text representation
 doc.getDocumentElement().normalize();

 NodeList nList = doc.getElementsByTagName("Worker");
 int totalPersons = nList.getLength();

 for (int s = 0; s < nList.getLength(); s++) {

 Node nNode = nList.item(s);
 Element eElement = (Element) nNode;


 if (nNode.getNodeType() == Node.ELEMENT_NODE) {

 if( eElement.getElementsByTagName("Status")!=null && eElement.getElementsByTagName("Status").item(0)!=null                                                 &&eElement.getElementsByTagName("Status").item(0).getTextContent().equals("Fail") ){

 NodeList nEmp = eElement.getElementsByTagName("Employee_ID");
 Element eId = (Element) nEmp.item(0);
 NodeList textFNList = eId.getChildNodes();
                                                        System.out.println("Employee_ID : "+ ((Node)    textFNList.item(0)).getNodeValue().trim());
  empID.add(((Node) textFNList.item(0)).getNodeValue().trim());

  NodeList nStatus = eElement.getElementsByTagName("Status");
  Element eStatus = (Element) nStatus.item(0);
  NodeList textLNList = eStatus.getChildNodes();

  System.out.println("Status : "+ ((Node) textLNList.item(0)).getNodeValue().trim());
  status.add(((Node) textLNList.item(0)).getNodeValue().trim());

  NodeList nFault = eElement.getElementsByTagName("Fault_String");
  Element eFault = (Element) nFault.item(0);
  NodeList textAgeList = eFault.getChildNodes();
  System.out.println("Fault_String"+ ((Node) textAgeList.item(0)).getNodeValue().trim());
 fault_String.add(((Node) textAgeList.item(0)).getNodeValue().trim());

                        }
                   }
            }




     }

最佳答案

您好,您可以按照以下代码操作,您将得到答案。这段代码将解决您的问题

<小时/>
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    try {
        DocumentBuilder dBuilder  = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(new File("FileLocation"));
        doc.getDocumentElement().normalize();
        System.out.println("Root element :" 
                + doc.getDocumentElement().getNodeName());
        NodeList nList = doc.getElementsByTagName("Worker");
        int totalPersons = nList.getLength();
        for (int s = 0; s < nList.getLength(); s++) {
                Node nNode = nList.item(s);
                Element eElement = (Element) nNode;
                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                NodeList processesList = eElement.getElementsByTagName("Process");                  for (int i = 0; i < processesList.getLength(); i++) {
                    Node node = processesList.item(i);
                    Element element = (Element) node;
                    if( element.getElementsByTagName("Status")!=null && element.getElementsByTagName("Status").item(0)!=null
                            &&element.getElementsByTagName("Status").item(0).getTextContent().equals("Fail") ){

                            NodeList nEmp = eElement.getElementsByTagName("Employee_ID");
                            Element eId = (Element) nEmp.item(0);
                            NodeList textFNList = eId.getChildNodes();

                            System.out.println("Employee_ID : "+ ((Node) textFNList.item(0)).getNodeValue().trim());
                            empID.add(((Node) textFNList.item(0)).getNodeValue().trim());

                            NodeList nStatus = element.getElementsByTagName("Status");
                            Element eStatus = (Element) nStatus.item(0);
                            NodeList textLNList = eStatus.getChildNodes();

                            System.out.println("Status : "+ ((Node) textLNList.item(0)).getNodeValue().trim());
                            status.add(((Node) textLNList.item(0)).getNodeValue().trim());

                            NodeList nFault = element.getElementsByTagName("Fault_String");
                            Element eFault = (Element) nFault.item(0);
                            if(eFault != null){
                            NodeList textAgeList = eFault.getChildNodes();
                            System.out.println("Fault_String"+ ((Node) textAgeList.item(0)).getNodeValue().trim());
                            fault_String.add(((Node) textAgeList.item(0)).getNodeValue().trim());
                            }else{
                                fault_String.add("");
                            }
                        }

                }

            }
        }
    } catch (ParserConfigurationException | SAXException | IOException e) {
        e.printStackTrace();
    }

关于java - 如何读取多个子节点并获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44840808/

相关文章:

java - recyclerview滚动条卡顿

xml - 如何用Go to struct list格式化这个xml?这个xml标签名是一样的,只是id不同

java - Android:动画 - 如何确定 xml 文件动画的结束并在 java 中启动 AlphaAnim?

python - 如何在 Python 中解析损坏的 XML?

javascript - DOM 脚本 : create elements and position them on one line

java - 如何在JAVA中将字符串 "2011-11-29 12:34:25"转换为 "dd-MM-yyyy"格式的日期

java - 如何用函数式风格的表达式替换 if(Optional.isPresent())

java - AL lib : (EE) UpdateDeviceParams: Failed to set 44100hz, 改为 48000hz

dom - 来自dom的Angular JS更新模型

javascript - 在 JavaScript 中将一个 DOM XML 节点复制到另一个节点