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


    
    
    
    
    
                
查看全文
  • 相关阅读:
    PAT 1097. Deduplication on a Linked List (链表)
    PAT 1096. Consecutive Factors
    PAT 1095. Cars on Campus
    PAT 1094. The Largest Generation (层级遍历)
    PAT 1093. Count PAT's
    PAT 1092. To Buy or Not to Buy
    PAT 1091. Acute Stroke (bfs)
    CSS:word-wrap/overflow/transition
    node-webkit中的requirejs报错问题:path must be a string error in Require.js
    script加载之defer和async
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10862739.html
  • Copyright © 2011-2022 走看看