Java XML

Java文件操作①——XML文件的读取:https://www.cnblogs.com/Qian123/p/5231303.html#_label1

Xml中SelectSingleNode方法,xpath查找某节点用法:https://www.cnblogs.com/love201314/p/5589784.html


JSON与XML的区别比较:www.cnblogs.com/SanMaoSpace/p/3139186.html


jar读取资源配置文件:https://blog.csdn.net/T1DMzks/article/details/75099029

Java 读取properties配置文件:https://blog.csdn.net/nicewuranran/article/details/51598247


解析XML 的代码示例:    

        /**读取文件生成,节点信息、边信息List*/
	@SuppressWarnings({ "unchecked", "rawtypes" })
	private TopoInfo praseFile(File file) throws JAXBException, DocumentException 
	{
		SAXReader reader = new SAXReader();
        Document doc = reader.read(file);
       
        List<Node> flowList = doc.selectNodes("//dataFlow/id");
        //输出BDI流 信息
        List<TdFlowInfo> resultFlowInfo = new ArrayList<TdFlowInfo>();
        flowList.forEach(node->{
        	TdFlowInfo tmp = new TdFlowInfo();
        	tmp.setFlowId(node.getText());
        	resultFlowInfo.add(tmp);
        });
        
        
        List<Node> list = doc.selectNodes("//dataFlow/flowInfo");
        List<String[]> typeJsons = Lists.newArrayList();
        List<String[]> fromToList = Lists.newArrayList();
        
        list.forEach(node ->{
            String xml = node.getText();
            try
            {
                Document xmlDoc = DocumentHelper.parseText(xml);
                List<Element> elements = xmlDoc.selectNodes("//bpmn2:serviceTask/bpmn2:extensionElements/bpmn2extn:feature"); 
                String type = null;
                String json = null;
                for(Element element:elements)
                {
                    type = element.attribute("type").getText();
                    json = element.getTextTrim().replace("\"maxDiscardCnt\":0L, \"maxErrorCnt\":0L,", "")
                                                .replace("\"dbSplitSize\":0L,", "");
                    if(json.length() >0 && (type.startsWith("com.huawei.data.integration.core.stage.extract") || type.startsWith("com.huawei.data.integration.core.stage.load")))
                    {
                        typeJsons.add(new String[]{type,json});
                    }
                }
                
                elements =  xmlDoc.selectNodes("//bpmn2:sequenceFlow");
                for(Element element:elements)
                {
                    fromToList.add(new String[]{element.attribute("sourceRef").getText(),element.attribute("targetRef").getText()});
                }
                
            }
            catch (Exception e)
            {
                logger.error("BDIXmlParser praseFile , exception : " + e);
            }
        });
        
        Map<String,TdNodeInfo> nodeMap = Maps.newHashMap(); 
        Map<String,String> labelIdMap = Maps.newHashMap(); 
        Map<String,String> labelAliasMap = Maps.newHashMap(); 
        ObjectMapper mapper = new ObjectMapper();
        typeJsons.stream().forEach(typeJson ->{
            Map map = null;
            try
            {
                map = mapper.readValue(typeJson[1], Map.class);
                TdNodeInfo infoDo = new TdNodeInfo();
                
                if("com.huawei.data.integration.core.stage.extract.txt.TextDataStage".equals(typeJson[0]))
                {
                    infoDo.setNodeLabel(String.valueOf(map.get("filePath"))+String.valueOf(map.get("filePattern")));
                    infoDo.setType("file");
                }
                else if("com.huawei.data.integration.core.stage.load.jdbc.JdbcLoadDataStage".equals(typeJson[0])
                        || "com.huawei.data.integration.core.stage.extract.jdbc.JdbcDataStage".equals(typeJson[0]))
                {
                    infoDo.setNodeLabel(String.valueOf(map.get("table")));
                    infoDo.setType("table");
                }
                else if("com.huawei.data.integration.core.stage.load.hive.HiveLoadDataStage".equals(typeJson[0])
                        ||"com.huawei.data.integration.core.stage.extract.hive.HiveExtractDataStage".equals(typeJson[0]))
                {
                    infoDo.setNodeLabel(String.valueOf(map.get("table")));
                    infoDo.setType("hive");
                }
                String id = labelIdMap.get(infoDo.getNodeLabel()+infoDo.getType());
                if(id == null)
                {
                    id = String.valueOf(map.get("id"));
                    labelIdMap.put(infoDo.getNodeLabel()+infoDo.getType(), id);
                    infoDo.setNodeId(id);
                    nodeMap.put(id,infoDo);
                    labelAliasMap.put(id, id);
                }
                else
                {
                    labelAliasMap.put(String.valueOf(map.get("id")), id);
                }
            }
            catch (Exception e)
            {
                logger.error("BDIXmlParser praseFile , typeJsons Exception : " + e + " , typeJsons[1] : " + typeJson[1]);
            }
        });
        
        
        Map<String,RelationNode> relationNodeMap = Maps.newHashMap();
        fromToList.forEach(formTo ->{
            String fromId = labelAliasMap.get(formTo[0]) == null ? formTo[0] : labelAliasMap.get(formTo[0]);
            String toId = labelAliasMap.get(formTo[1]) == null ? formTo[1] : labelAliasMap.get(formTo[1]);
            RelationNode from = relationNodeMap.get(fromId);
            RelationNode to = relationNodeMap.get(toId);
            if(from == null)
            {
                from = new RelationNode(fromId);
                relationNodeMap.put(fromId, from);
            }
            if(to == null)
            {
                to = new RelationNode(toId);
                relationNodeMap.put(toId, to);
            }
            
            if(!from.getNext().contains(to))
            {
                from.getNext().add(to);
            }
        });
        nodeMap.keySet().forEach(nodeId -> {
            RelationNode node = relationNodeMap.get(nodeId);
            if(node != null)
            {
                Set<RelationNode> nextNodes = node.getNext();
                if(nextNodes.size() > 0)
                {
                    Set<RelationNode> nodes = Sets.newHashSet();
                    Set<RelationNode> removedNodes = Sets.newHashSet();
                    for(RelationNode nextNode:nextNodes)
                    {
                        if(!nodeMap.containsKey(nextNode.getId()))
                        {
                            removedNodes.add(nextNode);
                            nodes.addAll(findUsedNodes(nextNode,nodeMap));
                        }
                    }
                    nextNodes.removeAll(removedNodes);
                    nextNodes.addAll(nodes);
                }
            }
        });
        
        List<TdEdgeInfo> resultEdgeInfo = new ArrayList<TdEdgeInfo>();
        //输出边信息
        nodeMap.keySet().forEach(nodeId -> {
            RelationNode node = relationNodeMap.get(nodeId);
            if(node != null)
            {
                Set<RelationNode> nextNodes = node.getNext();
                for(RelationNode nextNode:nextNodes)
                {
//                    System.out.println(nodeId+"->"+nextNode.getId());
                    TdEdgeInfo tmp = new TdEdgeInfo();
                    tmp.setFromNode(nodeId);
                    tmp.setToNode(nextNode.getId());
                    resultEdgeInfo.add(tmp);
                }
               
            }
            else
            {
//                System.out.println(nodeId+"->");
            	TdEdgeInfo tmp = new TdEdgeInfo();
                tmp.setFromNode(nodeId);
                resultEdgeInfo.add(tmp);
            }
        });
        
        List<TdNodeInfo> resultNodeInfo = new ArrayList<TdNodeInfo>();
        //输出节点信息
        nodeMap.values().forEach(node ->{
//            System.out.println(node.getNodeId()+"->"+node.getNodeLabel());
            resultNodeInfo.add(node);
        });
	        
        TopoInfo resultTopoInfo = new TopoInfo();
        resultTopoInfo.setTdFlowInfo(resultFlowInfo);
        resultTopoInfo.setTdNodeInfo(resultNodeInfo);
        resultTopoInfo.setTdEdgeInfo(resultEdgeInfo);
		
        return resultTopoInfo;
	}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值