介绍
有一个算法,是将大量TOPO DN实例解析成结构形式,并根据DN获取相应的数据。本人感觉值得分享,并供大家讨论与优化。
注意:TOPO DN实例的顺序,是被我的其它算法预处理过的,所以会比较规整。
TOPO DN实例输入片断:
"SubNetwork=HW-345678,ManagedElement=XXXX-1500/CSCF-1505",
"SubNetwork=HW-345678,ManagedElement=XXXX-1500/CSCF-1505,InventoryUnitRack=RACK-1",
"SubNetwork=HW-345678,ManagedElement=XXXX-1500/CSCF-1505,InventoryUnitRack=RACK-1,InventoryUnitShelf=RACK-1/SHELF-3",
"SubNetwork=HW-345678,ManagedElement=XXXX-1500/CSCF-1505,InventoryUnitRack=RACK-1,InventoryUnitShelf=RACK-1/SHELF-3,InventoryUnitPack=RACK-1/SHELF-3/UNIT-5",
"SubNetwork=HW-345678,ManagedElement=XXXX-1011/CSCF-1011",
"SubNetwork=HW-345678,ManagedElement=XXXX-1011/CSCF-1011,IcscfFunction=CSCF-1011",
"SubNetwork=HW-345678,ManagedElement=XXXX-1011/CSCF-1011,IcscfFunction=CSCF-1011,EpRpDynDnsIcscf=DNSPH-1",
"SubNetwork=HW-345678,ManagedElement=XXXX-1011/CSCF-1011,IcscfFunction=CSCF-1011,EpRpDynCxIcscf=DIA-1",
"SubNetwork=HW-345678,ManagedElement=XXXX-1011/CSCF-1011,IcscfFunction=CSCF-1011,EpRpDynDxIcscf=EPRPDX-1006",
"SubNetwork=HW-345678,ManagedElement=XXXX-1011/CSCF-1011,ScscfFunction=CSCF-1011",
"SubNetwork=HW-345678,ManagedElement=XXXX-1011/CSCF-1011,ScscfFunction=CSCF-1011,EpRpDynCxScscf=DIA-1"
TOPO DN实例预期输出片断:
<ManagedElement id="XXXX-1500/CSCF-1505">
<InventoryUnitRack id="RACK-1">
<!-- 在完整的代码中,这些地方会根据DN写入数据 -->
<InventoryUnitShelf id="RACK-1/SHELF-3">
<InventoryUnitPack id="RACK-1/SHELF-3/UNIT-5">
<!-- 在完整的代码中,这些地方会根据DN写入数据 -->
</InventoryUnitPack>
</InventoryUnitShelf>
</InventoryUnitRack>
</ManagedElement>
<ManagedElement id="XXXX-1011/CSCF-1011">
<IcscfFunction id="CSCF-1011">
<EpRpDynDnsIcscf id="DNSPH-1">
......
</EpRpDynDnsIcscf>
<EpRpDynCxIcscf id="DIA-1">
......
</EpRpDynCxIcscf>
<EpRpDynDxIcscf id="EPRPDX-1006">
......
</EpRpDynDxIcscf>
</IcscfFunction>
<ScscfFunction id="CSCF-1011">
<EpRpDynCxScscf id="DIA-1">
......
</EpRpDynCxScscf>
</ScscfFunction>
</ManagedElement>
核心代码片断:
package shuai.study.dnProcess;
import org.apache.commons.lang3.StringUtils;
/**
* @author shengshu
*
*/
public class DnProcess {
public static void process(String[] dnPathArray) {
int dnPathLength = dnPathArray.length;
for (int i = 0; i < dnPathLength; i++) {
String currentDnPath = dnPathArray[i];
String[] currentDnPathArray = StringUtils.split(currentDnPath, ",");
int currentDnPathLength = currentDnPathArray.length;
System.out.println("<" + StringUtils.substringBefore(currentDnPathArray[currentDnPathLength - 1], "=") + " id=\""
+ StringUtils.substringAfter(currentDnPathArray[currentDnPathLength - 1], "=") + "\">");
if (i == dnPathLength - 1) {
for (int k = currentDnPathLength - 1; k > 0; k--) {
System.out.println("</" + StringUtils.substringBefore(currentDnPathArray[k], "=") + ">");
}
} else {
String nextDnPath = dnPathArray[i + 1];
String[] nextDnPathArray = StringUtils.split(nextDnPath, ",");
int nextDnPathLength = nextDnPathArray.length;
if (currentDnPathLength == nextDnPathLength) {
System.out.println("</" + StringUtils.substringBefore(currentDnPathArray[currentDnPathLength - 1], "=") + ">");
}
if (currentDnPathLength > nextDnPathLength) {
for (int j = currentDnPathLength - 1; j >= nextDnPathLength - 1; j--) {
System.out.println("</" + StringUtils.substringBefore(currentDnPathArray[j], "=") + ">");
}
}
}
}
}
public static void main(String[] args) {
String[] dnPathArray = new String[] { "SubNetwork=HW-345678,ManagedElement=XXXX-1500/CSCF-1505",
"SubNetwork=HW-345678,ManagedElement=XXXX-1500/CSCF-1505,InventoryUnitRack=RACK-1",
"SubNetwork=HW-345678,ManagedElement=XXXX-1500/CSCF-1505,InventoryUnitRack=RACK-1,InventoryUnitShelf=RACK-1/SHELF-3",
"SubNetwork=HW-345678,ManagedElement=XXXX-1500/CSCF-1505,InventoryUnitRack=RACK-1,InventoryUnitShelf=RACK-1/SHELF-3,InventoryUnitPack=RACK-1/SHELF-3/UNIT-5",
"SubNetwork=HW-345678,ManagedElement=XXXX-1011/CSCF-1011", "SubNetwork=HW-345678,ManagedElement=XXXX-1011/CSCF-1011,IcscfFunction=CSCF-1011",
"SubNetwork=HW-345678,ManagedElement=XXXX-1011/CSCF-1011,IcscfFunction=CSCF-1011,EpRpDynDnsIcscf=DNSPH-1",
"SubNetwork=HW-345678,ManagedElement=XXXX-1011/CSCF-1011,IcscfFunction=CSCF-1011,EpRpDynCxIcscf=DIA-1",
"SubNetwork=HW-345678,ManagedElement=XXXX-1011/CSCF-1011,IcscfFunction=CSCF-1011,EpRpDynDxIcscf=EPRPDX-1006",
"SubNetwork=HW-345678,ManagedElement=XXXX-1011/CSCF-1011,ScscfFunction=CSCF-1011",
"SubNetwork=HW-345678,ManagedElement=XXXX-1011/CSCF-1011,ScscfFunction=CSCF-1011,EpRpDynCxScscf=DIA-1" };
DnProcess.process(dnPathArray);
}
}
分享到:
相关推荐
lib_topojson 一个C ++ topoJSON解析器。 TopoJSON是一种用于编码各种地理数据结构的格式。topoJSON规范JSON格式 JSON解析由gason完成用法./parser example.quantized.topojson样本文件example.quantized.topojson {...
ospf 所有知识解析图.topo
Topo排序
China.topojson 是中国省界地图的json格式 主要是适用于GIS开发,可以在页面显示出中国地图并且进行一些必要的操作。
使用d3 vue开发的Topo图
ToPo V1.2 Topo(添加字节)绿色 免费 强大 非常好用 破解
此资源用于帮助开发topo编辑页面的前端程序员,参考此资源可以给编辑方式带来思路
123.topo第一次实验
华为校园网组网2.topo
China.City.topojson 是中国城市明细地图的json格式 主要是适用于GIS开发,可以在页面显示出中国城市地图并且进行一些必要的操作。
topo图片处理,图片高亮,图片拖拽,图片路径,以及画线,布局
昆明市topo.json,仅为行政区/县的数据,用于地图展示,免去创建地图服务
dgiot_topo通道是影子设备与前端组态页面之间的桥接通道,实时订阅dgiot_task通道中解析成物模型的消息,将物模型消息格式转换成knova组态json格式推送到前端组态页面,实现大屏上设备数据的实时更新
geojson、topojson两种格式行政划分(全国-各省份)Power BI形状地图可以直接导入
CCIE LAB2 TOPO及其需求,路由与交换方向,希望可以拿到证书
CCNA-exam2 思科 topoCCNA-exam2 思科 topoCCNA-exam2 思科 topoCCNA-exam2 思科 topoCCNA-exam2 思科 topo
这是一个HTML5和Java写的一个Topo管理的小程序,使用在Tomcat里面,以后还是逐渐完善
华为code craft复赛用例设计的topo网络文件
一个容易扩展的拓扑图,js写的,下载就能看到效果.
静态路由配置,处于不同交换机下(不同网段)的PC机,相互进行通信ensp拓扑