zoukankan      html  css  js  c++  java
  • TOPO DN 解析

    介绍

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


    
    
    
    
    
                
查看全文
  • 相关阅读:
    【转】编写高质量代码改善C#程序的157个建议——建议61:避免在finally内撰写无效代码
    【转】编写高质量代码改善C#程序的157个建议——建议60:重新引发异常时使用Inner Exception
    【转】编写高质量代码改善C#程序的157个建议——建议59:不要在不恰当的场合下引发异常
    【转】编写高质量代码改善C#程序的157个建议——建议58:用抛出异常代替返回错误代码
    【转】编写高质量代码改善C#程序的157个建议——建议57:实现ISerializable的子类型应负责父类的序列化
    elasticsearch从入门到出门-02-简单的CRUD
    elasticsearch从入门到出门-01windows上安装使用
    Idea 使用的技巧和设置
    Ubuntu16.04 安装搜狗输入法
    Ubuntu 下安装JDK1.8
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10862739.html
  • Copyright © 2011-2022 走看看