티스토리 뷰

반응형

cheerio 모듈을 이용해서 xml 파일의 내용을 파싱할 때, selector의 content가 없는 경우 text를 제대로 받아오지 못하는 문제가 발생한다.

<SELECTOR></SELECTOR>

위와 같은 형식으로 xml이 출력되면 상관없지만

 

<SELECTOR/>

위와 같은 형식으로 selector가 self-closing 되어버리면 text를 제대로 받아오지 못한다.

이럴 경우를 해결하기 위해, cheerio.load 시에 xmlMode를 true로 설정해주면 된다.

 

다음과 같은 xml 형식의 파일이 있다고 가정하자.

<C005>
<total_count>100014</total_count>
<RESULT>
  <CODE>INFO-000</CODE>
  <MSG>정상처리되었습니다.</MSG>
</RESULT>
<row id="0">
  <NAME>홍길동</NAME>
  <AGE>28</AGE>
  <ETC>동에 번쩍 서해 번쩍</ETC>
</row>
<row id="1">
  <NAME>김철수</NAME>
  <AGE>31</AGE>
  <ETC/>
</row>

해당 내용을 제대로 가져오기 위해서는 다음과 같이 설정해주면 된다.

      //var $ = cheerio.load(html);	// 원래 소스
      var $ = cheerio.load(html, {xmlMode: true});	// xmlMode 설정
      
      $('row').each(function () {
        row_id = $(this).attr('id');       // row id
        NAME = $(this).children('NAME').text();       //이름
        AGE = $(this).children('AGE').text();       //나이
        ETC = $(this).children('ETC').text();       //기타
        
        console.debug('row_id : ' + row_id);
        console.debug('NAME : ' + NAME);
        console.debug('AGE : ' + AGE);
        console.debug('ETC : ' + ETC);
      });

 

xmlMode를 true로 설정해주지 않으면 'row id=1'인 '김철수'의 'ETC' 필드 값이 제대로 출력되지 않는다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함