우상
450
2019-02-11 22:48:20 작성 2019-02-11 22:48:40 수정됨
5
120

xml 데이터를 map 으로 변환해서 리스트에 담아주고 있는데 왜 같은값이 담기는걸까요???


xml 데이터를 map 으로 변환해서 리스트에 담아주고 있는데 왜 같은값이 담기는걸까요???

key, value 형식으로 map 담고 map 을 list 에 담아 줬는데 같은값이 담기는 이유가 뭔지 모르겠네요

===========================================================================


import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;


import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;


import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.Node;

import org.w3c.dom.NodeList;



public class jdomPrac {

    public static void main(String args[]) {

    HashMap<String, String> mapData = new HashMap<String, String>();

    List<HashMap<String, String>> listToMap = new ArrayList<HashMap<String, String>>();

   

    try {

            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

            DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

            Document xml = null;

            //XML DOCUMENT 획득

            xml = documentBuilder.parse("https://rss.blog.naver.com/thebluehousekr.xml");

            //Root엘리먼트 획득

            Element element = xml.getDocumentElement();

            //Root엘리먼트의 channel 자식태그는 1개이므로 item(0)으로  획득

            Node channelNode = element.getElementsByTagName("channel").item(0);

            //channel태그내에 존재하는 자식태그 획득

            NodeList list = channelNode.getChildNodes();

            for(int i=0; i<list.getLength(); i++) {

             //image,link,title.. 여러개 태그 중 item 태그만 획득

             if(list.item(i).getNodeName().equals("item")) {

                 //item 태그의 자식노드 획득

                 NodeList list2 = list.item(i).getChildNodes();

                 for(int j=0;j<list2.getLength();j++) {

                     //자식태그가 title/description일경우에만 태그명 + 값을 출력

                     if(list2.item(j).getNodeName().equals("title") || list2.item(j).getNodeName().equals("link")){

                         String content = list2.item(j).getTextContent();

                         //줄바꿈이 되어있으므로 \n replaceall

                         content = content.replaceAll("\n", "");

                         

                         mapData.put(list2.item(j).getNodeName(), content);

                         listToMap.add(mapData);

                     }

                 }

             }

            }

     } catch (Exception e) {

         e.printStackTrace();

     }

    System.out.println(listToMap);

    }


0
0
  • 답변 5

  • 나도아빠다
    2k
    2019-02-11 22:53:56 작성 2019-02-11 22:54:14 수정됨

    키워드를 알려드리면..


    학원에서, 또는 자바책에서 제일 먼저 나오는 그대사

    call by value

    0
  • 우상
    450
    2019-02-12 10:59:44

    당최 이유를 알수가 없네요..

    0
  • 나도아빠다
    2k
    2019-02-12 11:00:42 작성 2019-02-12 11:01:00 수정됨

    new Hashmap을 for문 안으로 넣어보세요

    0
  • 우상
    450
    2019-02-12 11:23:15

    감사합니다. 말한데로 해결했는데... 한가지 궁금한점이 for 문안에 넣게 되면 for 문돌때마다 map 객체를 생성하게 되는데, 만약에 다수가 사용하는 프로그램같은경우 문제가 없을까요???

    0
  • 나도아빠다
    2k
    2019-02-12 11:30:57
    10개의 맵이 필요하면 10개의 맵을 만드는게 당연한원리입니다. 문제가 생기면 그게더 이상할거같습니다.


    필요한건 10개인데 1개만 만들어서 쓸방법을 찾는다면.. 그한개안에 키를 다 다른이름으로 주는수밖에요..


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.