Разбор файла XML и чтение родительского и дочернего элементов на основе поиска - PullRequest
1 голос
/ 20 апреля 2020

У меня есть большой xml файл, в котором мне нужно найти номер контракта, который соответствует, и после этого мне нужно прочитать все оставшиеся элементы родительского элемента, включая дочерние узлы. Я тестирую и изо всех сил пытаюсь найти приемлемое решение.

Пример файла XML, в котором мой исходный файл очень большой и не может быть использован здесь.

Мое требование - поиск контракта и основанный на том, чтобы прочитать все значения в этом документе. Мне нужно использовать эти значения для сравнения с приложением '' '

<FILE>
<Document RECORD="1">
    <Contract>701</Contract>
    <Contact></Contact>
    <Plan></Plan-Series>
    <Company-Cd>002</Company>
    <Child1>
         <ele1>dds</ele1>
        <ele2>dds</ele2>
    </Child1>
    <Child2>
         <ele1>dds</ele1>
        <ele2>dds</ele2>
    </Child2>
    <Transfers OCCURRENCE="1">
        <ele1>dds</ele1>
        <ele2>dds</ele2>
    </Transfers>
    <Transfers OCCURRENCE="2">
        <ele1>dds</ele1>
        <ele2>dds</ele2>
    </Transfers>
    <Transfers OCCURRENCE="3">
        <ele1>dds</ele1>
        <ele2>dds</ele2>
    </Transfers>
</Document
<Document RECORD="2">
    <Contract>702</Contract>
    <Contact></Contact>
    <Plan></Plan-Series>
    <Company-Cd>002</Company>
    <Child1>
         <ele1>dds</ele1>
        <ele2>dds</ele2>
    </Child1>
    <Child2>
         <ele1>dds</ele1>
        <ele2>dds</ele2>
    </Child2>
    <Transfers OCCURRENCE="1">
        <ele1>dds</ele1>
        <ele2>dds</ele2>
    </Transfers>
    <Transfers OCCURRENCE="2">
       <ele1>dds</ele1>
        <ele2>dds</ele2>
    </Transfers>
    <Transfers OCCURRENCE="3">
        <ele1>dds</ele1>
        <ele2>dds</ele2>
    </Transfers>
</Document  
</FILE> 

' '' Из-за текстовых элементов или по другим причинам он не собирается сокращать узел id

'' '

File fXmlFile = new File(inputFile);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
nList = doc.getElementsByTagName("Document");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node node = nList.item(temp);
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
if (element.getNodeName()=="Contract-Id") {
String nodetext=element.getTextContent();
if(nodetext=="77530006") {
System.out.println("got it");
        }
    }
  }     
}   

'' '

1 Ответ

0 голосов
/ 21 апреля 2020

'' Я могу понять это. Мне нужно l oop через подмножество, чтобы пройти через узел идентификатора контракта ..

File fXmlFile = new File(inputFile);
       DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
       DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
       Document doc = dBuilder.parse(fXmlFile);
       doc.getDocumentElement().normalize();

            NodeList nList;
            NodeList nChild;
            NodeList nSubset;

            nList = doc.getElementsByTagName("Document");
            aa:
            for (int temp = 0; temp < nList.getLength(); temp++) {
                Node node = nList.item(temp);
                nChild=node.getChildNodes();

                bb:
                  for(int temp1=0;temp1<nChild.getLength();temp1++) {
                      Element element1 =  (Element) node;
                      Node node1=nChild.item(temp1);
                      System.out.println("Child nodes are:"+node1.getNodeName());
                      if (node1.getNodeName()=="Contract-Id") {
                            String nodetext=node1.getTextContent();

                            if(nodetext.equalsIgnoreCase(ContractNumber)) {
                                System.out.println("Contract number found");
                                Node element2 =  (Element) node;
                                element2=node1.getParentNode();
                                nSubset=element2.getChildNodes();
                                visitChildNodes(nSubset, "Document", listUniqueEmployeeNames,empMap);
                                //System.out.println("Child nodes are:"+empMap);
                                empMap.values().removeAll(Collections.singleton(null));
                                break;
                            }
                            break bb;   
                        }

                  }
            } 

'' '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...