자유게시판

제목 여러분의 도움이..ㅠㅠ jquery로 무한뎁스 xml을 파싱해야하는데요..
글쓴이 터프키드 작성시각 2010/10/28 16:17:33
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 16428   RSS
보통 xml은
<item>
<title>어쩌구</title>
<date>어쩌수</date>
</item>
...

이런식으로 규약이 정해진채로 서로 교환을 하는데..
이번에 activeX에서 받은 xml파일을 디렉토리 구조대로 출력하는 스크립트를 짜야하는데
그 디렉토리 구조가 바로 인터넷 익스플로러의 "즐겨찾기" 입니다..ㅜㅜ

jquery로 activeX에 접근해서 xml문서를 받아다가 구조를 html로 바꾸고 그 구조를 treeview 플러그인 ( http://jquery.bassistance.de/treeview/demo/ ) 으로 트리형태로 보여주게 하는데요

문제가.. xml을 파싱해서 <ul> <li></li></ul> 구조로 변경해야하는데..
folder 뎁스가 무한일수가 있어요.. 어떤 사람은 5단계까지 폴더를 만들어 정리할 수 있어서..
딱 몇번까지만 가져올수 없고, 하위노드를 계속 탐색해야하는데.. 도데체 머리가 안돌아가요 ㅠㅠ

일단 테스트용 xml 문서는 
<?xml version="1.0"?>
<ROOT>
	<DIR name="Links">
		<FILE name="웹 조각 갤러리.url">http://go.microsoft.com/fwlink/?LinkId=121315</FILE>
		<FILE name="추천 사이트.url">https://ieonline.microsoft.com/#ieslice</FILE>
	</DIR>
	<DIR name="Links for 대한민국">
		<FILE name="e뮤지엄.url">http://go.microsoft.com/fwlink/?LinkId=142459</FILE>
		<FILE name="대한민국 구석구석.url">http://go.microsoft.com/fwlink/?LinkId=142460</FILE>
		<FILE name="대한민국 전자정부.url">http://go.microsoft.com/fwlink/?LinkId=129723</FILE>
		<FILE name="에듀넷.url">http://go.microsoft.com/fwlink/?LinkId=129725</FILE>
		<FILE name="예술로.url">http://go.microsoft.com/fwlink/?LinkId=129726</FILE>
		<FILE name="전자민원G4C.url">http://go.microsoft.com/fwlink/?LinkId=129724</FILE>
	</DIR>
	<DIR name="Microsoft Websites">
		<DIR name="adsf">
			<DIR name="basdf">
				<FILE name="예술로.url">http://go.microsoft.com/fwlink/?LinkId=129726</FILE>
				<FILE name="전자민원G4C.url">http://go.microsoft.com/fwlink/?LinkId=129724</FILE>
			</DIR>
			<FILE name="IE 추가 기능 갤러리.url">http://go.microsoft.com/fwlink/?LinkId=50893</FILE>
			<FILE name="IE 추가 기능 갤러리.url">http://go.microsoft.com/fwlink/?LinkId=50893</FILE>
		</DI>
		<FILE name="IE 추가 기능 갤러리.url">http://go.microsoft.com/fwlink/?LinkId=50893</FILE>
	</DIR>
	<DIR name="Microsoft 웹 사이트">
		<FILE name="IE 홈.url">http://go.microsoft.com/fwlink/?LinkId=72186</FILE>
		<FILE name="Microsoft Store.url">http://go.microsoft.com/fwlink/?linkid=140813</FILE>
	</DIR>
	<DIR name="MSN 웹 사이트">
		<FILE name="MSN 금융.url">http://go.microsoft.com/fwlink/?LinkId=72640</FILE>
		<FILE name="MSN 뉴스.url">http://go.microsoft.com/fwlink/?LinkId=72636</FILE>
		<FILE name="MSN 스포츠.url">http://go.microsoft.com/fwlink/?LinkId=72635</FILE>
		<FILE name="MSN 연예.url">http://go.microsoft.com/fwlink/?LinkId=72659</FILE>
		<FILE name="MSN.url">http://go.microsoft.com/fwlink/?LinkId=72630</FILE>
	</DIR>
	<DIR name="Windows Live">
		<FILE name="Windows Live 갤러리.url">http://go.microsoft.com/fwlink/?LinkId=70742</FILE>
		<FILE name="Windows Live 메일.url">http://go.microsoft.com/fwlink/?LinkId=72681</FILE>
		<FILE name="Windows Live 스페이스.url">http://go.microsoft.com/fwlink/?LinkId=68927</FILE>
		<FILE name="Windows Live 패키지 다운로드.url">http://go.microsoft.com/fwlink/?LinkId=72700</FILE>
	</DIR>
	<FILE name="▒ 컨텐츠와 함께 위디스크 ▒.url">http://www.wedisk.co.kr</FILE>
	<FILE name="길거리 WIFI 무선 인터넷 암호 풀기! 길에서도 인터넷을~ __ Blah, blah, blah ~~~ ★.url">http://drunken009.tistory.com/m/181</FILE>
	<FILE name="날씨.url">http://m.weather.naver.com/</FILE>
</ROOT>
이거에요
세번째 DIR을 보면 안에 또 DIR이 있고 또 그 안에 DIR이 있고요..
이걸 하위 노드 수 관계없이 태그로 변환할 방법이 있을까요?
좀 도와주세요.. 여러분에 타이핑 하나하나가 절 살리실 수 있어요 ㅠ
 다음글 10월 정모 후기 (4)
 이전글 정모의 날이 밝았습니다. ^^; (9)

댓글

터프키드 / 2010/10/28 16:19:50 / 추천 0
 아참 참고로 제가 첫 디렉토리랑 하위 파일만 나오게 짜본것 올릴께요;;
// 엑티브엑스 즐겨찾기
if($.browser.msie) {

	function getXmlObj(){
		objMineWeb = new ActiveXObject("MineWeb.mwCtrl");
		xmlStr = objMineWeb.getFav();
		alert(xmlStr);
		//alert(xmlStr);
		if (window.ActiveXObject) {
			var doc = new ActiveXObject('Microsoft.XMLDOM');
			doc.loadXML(xmlStr);
			return doc;
		}
	}
	
	
	
	var xml = getXmlObj();
	//alert(xml);
	var html = "";
	html += '<ul id="favoriteTree" class="filetree">';
	// 디렉토리로 되어있는 것들.
	$(xml).find("ROOT").children("DIR").each(function(i,e){
		var $entry = $(this);
		var folder = $entry.attr('name');
		html += '<li  class="closed"><span class="folder">'+folder+'</span>';
			
			html += '<ul>';
			$entry.children("FILE").each(function(i2, e2){
				var $$entry = $(this);
				var name = $$entry.attr('name').split(".")[0];
				var url = $$entry.text();
				html += '<li><a class="add_sites" href="'+url+'"><span class="file">'+name+'</span></a></li>';
			});
			html += '</ul>';
		
		html += '</li>';
	});
	
	html += '</ul>';
	
	$("#favoriteSite").append(html).treeview();
	$("#favoriteTree").bind("content_loaded", function(){
		$("#favoriteSite").treeview();
	});

}

변종원(웅파) / 2010/10/29 18:10:29 / 추천 0
보통 재귀호출(자기 자신을 다시 호출)하는 방식으로 처리를 합니다.

디렉토리 만드는 부분을 함수화 하고 하위가 있을 경우 재귀호출해서 계속 생성하는 구조..

직접적인 도움을 드리지 못해 죄송합니다. ^^
터프키드 / 2010/11/10 14:00:12 / 추천 0
 ^^ 다행히 잘 처리했습니다~
늦었지만 답변주셔서 감사해요