TOPO DN 解析

简介: <p>介绍</p> <p>    有一个算法,是将大量TOPO DN实例解析成结构形式,并根据DN获取相应的数据。本人感觉值得分享,并供大家讨论与优化。</p> <p><br></p> <p>    注意:TOPO DN实例的顺序,是被我的其它算法预处理过的,所以会比较规整。</p> <p><br></p> <p>TOPO DN实例输入片断:<br></p> <p></p>

介绍

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


 
 
相关文章
couldn't find "libxxxx.so"的解决办法
couldn't find "libxxxx.so"的解决办法
1259 0
|
6月前
|
存储
19MyCat - 分片join(ER Join)
19MyCat - 分片join(ER Join)
18 0
|
11月前
|
关系型数据库 MySQL 网络安全
PolarDB-X中的DN启动不了的问题
PolarDB-X中的DN启动不了的问题
65 0
|
算法 Java 大数据
访问HBase经常出现报错:ServerNotRunningYetException: Server xxx.xxx.xxx is not running yet
访问HBase经常出现报错:ServerNotRunningYetException: Server xxx.xxx.xxx is not running yet
|
存储 分布式计算 Hadoop
DN 多目录配置—案例| 学习笔记
快速学习 DN 多目录配置—案例
132 0
DN 多目录配置—案例| 学习笔记
omnicore-cli error couldn't connect to server
omnicore-cli error couldn't connect to server
109 0
|
SQL 存储 关系型数据库
Citus 多CN部署与Citus MX
Citus MX是Citus集群中横向扩展CN能力的技术,本文件聊一下Citus MX使用的话题
2262 0
|
网络协议 数据库 关系型数据库
[20180427]SCAN_IP DNS 反向解析2.txt
[20180427]SCAN_IP DNS 反向解析2.txt --//从Oracle 11gR2开始,引入SCAN(Single Client Access Name) IP的概念,相当于在客户端和数据库之间增加一层虚拟的网络服务层 --//,即是SCAN IP和SCAP IP Listener。
1218 0
|
SQL Go 数据库
SQL Server 批量主分区备份(Multiple Jobs)
原文:SQL Server 批量主分区备份(Multiple Jobs) 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 案例分析(Case) 方案一(Solution One) 方案二(Solution Two) 方案三(So...
1146 0