Development/XE2012.07.03 06:44
XE는 사용자가 꽤 많은 CMS (Content Management System) 임에도 불구하고 열악한 기술지원과 매뉴얼 때문에 커스터마이징을 필요로 하는 사람들에게 참 많은 숙제를 안겨주고 있다. 제로보드 시절만 해도 그렇지 않았는데 네이버가 인수한 이후에는 뭔가 부드럽지 않은 분위기다.

오늘 올리는 내용은 사실 포스팅으로 남겨 두기도 참 뻘쭘한 내용이다. XE 개발자 매뉴얼에 제대로 기술이 되어 있지 않아 삽질한 내용이기 때문이다. MySql 에서 쿼리 크기를 제한할 때는 쿼리 뒷부분에 limit [숫자] 형태로 쿼리 갯수를 제한할 수 있다. MS-SQL 에서 select 문 바로 뒤에 top [숫자] 를 적어주는 것과 동일한 효과다.

select * 
  from xe_documents 
 where module_srl=3038
   and voted_count > 5
 limit 5


특정한 게시판 모듈에서 추천수가 5 이상인 게시물을 가져오되 5개를 넘지 않도록 만든 아주 간단한 쿼리다. 이 쿼리를 XE 가 사용하는 XML 형태로 변경하면 어떻게 될까? 구현하는 사람에 따라 차이가 있겠지만 아래와 같은 XML 로 만들어질 것 같다. 


	
        
		
	
		
		
		
	
	
		
	
	


삽질을 했던 이유는 바로 마지막의 <list_count> 부분이다. 개발자 매뉴얼 그 어디에도 <list_count> 엘레멘트가 <navigation> 엘레멘트의 하위 엘레멘트라는 표기가 없다. 물론 <navigation> 엘레멘트 설명에는 "정렬 순서나 페이징을 지원" 이라고 되어 있지만 그 설명을 "따라서 <list_count> 는 <navigation> 의 자식입니다"로 해석할 수 있는 사람은 몇 안될것 같다. 누군가 동일한 삽질을 할까봐 포스팅으로 남겨둔다.

- NoPD - 
저작자 표시
신고
Posted by 노피디
Development/Database2011.06.03 11:35
얼마전에 올렸던 포스팅에서 OpenXML을 이용하여 대용량 XML 형태 데이터를 MS-SQL 데이터베이스에 효과적으로 넣는 방법에 대해서 공유를 했었다. 하지만 OpenXML 을 이용하는 방법은 조금 까다로운 감이 없지 않고 구문이 복잡해져서 복잡한 XML 데이터를 핸들링 할때는 불편한게 사실이다.

오늘 소개해 드리는 방법은 이보다 더 간단한 방식으로 SQL Server 2005, 2008 등에서 XML 에 대한 자체적인 지원을 시작하면서 사용 가능해진 방법이다. OpenXML 을 이용하는 방법보다 단순하게 쿼리를 만들 수 있는 장점이 있는 반면 OpenXML 이 상당히 구체적으로 노드와 어트리뷰트, 값을 지정해서 뽑아내는 것보다 명확하지 않아 보일 수 있는 단점도 있다.
DECLARE @x XML

SET @x = N'
  
    1
    2
    3
  
'

SELECT 
	x.y.value('@name[1]', 'VARCHAR(20)'),
	x.y.value('.', 'INT')
FROM @x.nodes('my_data/item_list/item') as x(y)
변수를 XML 형태로 선언을 하고 파싱을 하고자 하는 XML 데이터를 이 변수에 넣어주는 것에서부터 시작해 보자. 데이터는 객체의 nodes 라는 속성을 통해서 읽어내고자 하는 XML 의 노드를 지정하여 데이터 소스로 사용하게 된다. Select 문에서 읽어들인 값에 대해 .value 속성을 통해 이름과 자료형을 기술해주면 데이터가 파싱되어 결과로 출력된다.


- NoPD -
신고
Posted by 노피디

티스토리 툴바