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