【问题标题】:Parsing XML file and read parent and child based on search解析XML文件并基于搜索读取父子节点
【发布时间】:2020-08-02 20:55:42
【问题描述】:

我有大型 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");
        }
    }
  }     
}   

'''

【问题讨论】:

标签: java xml web-services


【解决方案1】:

''' 我能够弄清楚。我需要遍历子集才能遍历合约 id 节点..

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

                  }
            } 

'''

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多