TOPO DN 解析

解析TOPODN实例为结构化数据

介绍

有一个算法,是将大量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);
	}
}





                
<?xml version="1.0" encoding="UTF-8"?> <topology name="F5G全光网络拓扑" desc="四层智能教学楼F5G架构" version="ENSP V200R003C00"> <devices> <!-- 核心层设备 --> <device name="Core-S12700X" type="S12700X-A" vendor="Huawei" position="200,100"> <interfaces> <interface name="XGigabitEthernet0/0/1" type="XGE" media="fiber" ip="10.0.0.1/24"/> <interface name="XGigabitEthernet0/0/2" type="XGE" media="fiber" ip="10.0.1.1/24"/> <interface name="XGigabitEthernet0/0/3" type="XGE" media="fiber" ip="10.0.2.1/24"/> <interface name="XGigabitEthernet0/0/4" type="XGE" media="fiber" ip="10.0.3.1/24"/> <interface name="GigabitEthernet0/0/1" type="GE" media="copper" ip="192.168.0.1/24"/> <interface name="GigabitEthernet0/0/2" type="GE" media="copper" ip="172.16.0.1/24"/> </interfaces> <config> system-view sysname Core-S12700X vlan batch 10 20 30 40 100 interface XGigabitEthernet0/0/1 port link-type trunk port trunk allow-pass vlan all undo shutdown interface GigabitEthernet0/0/1 port link-type access port default vlan 100 undo shutdown </config> </device> <!-- 防火墙设备 --> <device name="FW-USG6000" type="USG6000" vendor="Huawei" position="100,200"> <interfaces> <interface name="GigabitEthernet0/0/1" type="GE" media="copper" ip="192.168.0.2/24"/> <interface name="GigabitEthernet0/0/2" type="GE" media="copper" ip="202.100.0.1/24"/> </interfaces> </device> <!-- 1F分光器 --> <device name="Splitter-1F" type="Splitter" vendor="Huawei" position="300,100" splitter-ratio="1:16"> <interfaces> <interface name="input-1" type="fiber" media="fiber"/> <interface name="output-1" type="fiber" media="fiber"/> <interface name="output-2" type="fiber" media="fiber"/> <!-- 省略output3-output16 --> </interfaces> </device> <!-- 1F接入层ONU --> <device name="ONU-1F-01" type="HG8245Q2" vendor="Huawei" position="300,200"> <interfaces> <interface name="PON-0" type="fiber" media="fiber"/> <interface name="GE-0" type="GE" media="copper" poe="enable"/> <interface name="GE-1" type="GE" media="copper" poe="enable"/> <interface name="GE-2" type="GE" media="copper" poe="enable"/> <interface name="GE-3" type="GE" media="copper" poe="enable"/> </interfaces> </device> <!-- 1F AP设备 --> <device name="AP-1F-01" type="AP7060DN" vendor="Huawei" position="400,200"> <interfaces> <interface name="GE-0" type="GE" media="copper"/> </interfaces> </device> <!-- 终端设备(PC) --> <device name="PC-Classroom-1F" type="PC" vendor="Generic" position="500,200"> <interfaces> <interface name="Ethernet0" type="Ethernet" media="copper" ip="10.0.0.10/24"/> </interfaces> </device> </devices> <!-- 设备连接关系 --> <links> <link type="fiber"> <source device="Core-S12700X" interface="XGigabitEthernet0/0/1"/> <target device="Splitter-1F" interface="input-1"/> </link> <link type="fiber"> <source device="Splitter-1F" interface="output-1"/> <target device="ONU-1F-01" interface="PON-0"/> </link> <link type="copper"> <source device="ONU-1F-01" interface="GE-0"/> <target device="AP-1F-01" interface="GE-0"/> </link> <link type="copper"> <source device="ONU-1F-01" interface="GE-1"/> <target device="PC-Classroom-1F" interface="Ethernet0"/> </link> <link type="copper"> <source device="Core-S12700X" interface="GigabitEthernet0/0/1"/> <target device="FW-USG6000" interface="GigabitEthernet0/0/1"/> </link> </links> </topology> 按照这个代码生成 ensp 拓扑图
11-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值