閱讀249 返回首頁    go 小米 go 小米6


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 >
	<InventoryUnitRack >
		<!-- 在完整的代碼中,這些地方會根據DN寫入數據 -->
		<InventoryUnitShelf >
			<InventoryUnitPack >
				<!-- 在完整的代碼中,這些地方會根據DN寫入數據 -->
			</InventoryUnitPack>
		</InventoryUnitShelf>
	</InventoryUnitRack>
</ManagedElement>
<ManagedElement >
	<IcscfFunction >
		<EpRpDynDnsIcscf >
			......
		</EpRpDynDnsIcscf>
		<EpRpDynCxIcscf >
			......
		</EpRpDynCxIcscf>
		<EpRpDynDxIcscf >
			......
		</EpRpDynDxIcscf>
	</IcscfFunction>
	<ScscfFunction >
		<EpRpDynCxScscf >
			......
		</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);
	}
}





最後更新:2017-04-03 05:38:56

  上一篇:go 小猴爬台階問題
  下一篇:go centos 安裝 pcre