2012-03-29 8 views
1

XML 환경을 사용자 환경 설정에 문자열로 저장하고 있습니다. 이 XML 문자열에서 hashmap을 만들고 싶습니다. 제발 도와주세요. 여기 내 XML 문자열입니다;XML 문자열의 해시 맵 - Android

String data = " <modules> <Calls> <access>89</access> <delete>90</delete> <edit>90</edit> <export>90</export> <import>90</import> <list>90</list> <view>90</view> </Calls> <Cases> <access>89</access> <delete>90</delete> <edit>90</edit> <export>90</export> <import>90</import> <list>90</list> <view>90</view> </Cases> <CFM_CoBuyer> <access>89</access> <delete>90</delete> <edit>90</edit> <export>90</export> <import>90</import> <list>90</list> <view>90</view> </CFM_CoBuyer> <Contacts> <access>89</access> <delete>-99</delete> <edit>90</edit> <export>90</export> <import>90</import> <list>90</list> <view>90</view> </Contacts> <Inv_Inventory> <access>89</access> <delete>90</delete> <edit>90</edit> <export>90</export> <import>90</import> <list>90</list> <view>90</view> </Inv_Inventory> <Meetings> <access>89</access> <delete>90</delete> <edit>90</edit> <export>90</export> <import>90</import> <list>90</list> <view>90</view> </Meetings> <Notes> <access>89</access> <delete>90</delete> <edit>90</edit> <export>90</export> <import>90</import> <list>90</list> <view>90</view> </Notes> <Opportunities> <access>89</access> <delete>-99</delete> <edit>90</edit> <export>-99</export> <import>-99</import> <list>80</list> <view>90</view> </Opportunities> <Tasks> <access>89</access> <delete>90</delete> <edit>90</edit> <export>90</export> <import>90</import> <list>90</list> <view>90</view> </Tasks> <Trd_TradeIns> <access>89</access> <delete>90</delete> <edit>90</edit> <export>90</export> <import>90</import> <list>90</list> <view>90</view> </Trd_TradeIns> </modules> "; 

배열의 "modules"태그에서 모듈을 가져오고 배열에 각 모듈에 대한 하위 태그가 있어야합니다. 해결책을 제안하십시오.

답변

2

당신은 Riddhish.Chaudhari @ 회신에 대한 노드 목록을

Document document = null; 
NodeList nodeList = null; 
Node node = null; 

nodeList = document.getElementsByTagName("modules").item(0).getChildNodes(); 
HashMap <String,Object> localParameterMap = new HashMap<String,Object>(); 

for(int i=0; i<nodeList.getLength(); i++){ 
    node = nodeList.item(i); 
    if(node.getNodeName().equals("Calls")){ 
     Collection objCollection = readAttributeList(node); 
     localParameterMap.put(ATTRIBUTE_LIST, objCollection); 
    } 
} 

update XML Dynamically

+0

또 다른 예 http://stackoverflow.com/questions/9781568/update-data-in-java-class-as-per-change-in-attribute-in-the-xml-file/9783154# 9783154 –

+0

[Riddhish.Chaudhari] [1] [1] : http://stackoverflow.com/users/1236051/riddhish-chaudhari –

0

감사합니다 방법 사람을 사용 할 수 있습니다. 예 NodeList 내 요구 사항에 대한 실제 솔루션을 여기에 어떻게 해결 ...입니다.

다음 함수를 구현;

public static void parseRoles(){ 
    roles = new HashMap<String, Role>(); 
    user_roles = data; // my xml string 

    try { 
     Document dom = getXMLDocument(user_roles); 

     NodeList modules = dom.getDocumentElement().getChildNodes(); 

     for (int i=0; i<modules.getLength(); i++){ 
      Role role = new Role(); 

      Node module = modules.item(i); 
      String moduleName = module.getNodeName(); 

      NodeList accesses = module.getChildNodes(); 

      for (int j=0; j<accesses.getLength(); j++){ 
       Node access = accesses.item(j); 

       String name = access.getNodeName(); 
       int accessValue = -1; 
       try{ 
        accessValue = Integer.parseInt(access.getFirstChild().getNodeValue().trim()); 
       }catch (Exception e) { 
        AlertHelper.logError(e.getClass().getCanonicalName(), e.getMessage()); 
       } 

       if(accessValue != -1){ 
        if(name.equalsIgnoreCase("access")){ 
         role.access = accessValue; 
        }else if(name.equalsIgnoreCase("view")){ 
         role.view = accessValue; 
        }else if(name.equalsIgnoreCase("list")){ 
         role.list = accessValue; 
        }else if(name.equalsIgnoreCase("edit")){ 
         role.edit = accessValue; 
        }else if(name.equalsIgnoreCase("delete")){ 
         role.delete = accessValue; 
        } 
       } 
      } 

      roles.put(moduleName.toLowerCase(), role); 
     } 
    } catch (Exception e) { 
     roles = null; 
     AlertHelper.logError(e.getClass().getCanonicalName(), e.getMessage()); 
    } 
} 

위의 함수에서 Role() 객체에 xml의 데이터를 저장하는 프로젝트 프로젝트에서 다음 클래스를 추가했습니다.

public class Role { 
    public int access = 89; 
    public int view = 90; 
    public int list = 90; 
    public int edit = 90; 
    public int delete = 90; 
} 

이제 데이터를 가져올 필요가있을 때마다 다음과 같은 방법으로 사용할 수 있습니다.

나는 다음 역할를 해시 맵 사용, 통화 모듈에서 요소를 얻을한다고 가정;

int access = roles.get("Calls").access; 
int view = roles.get("Calls").view; 
int list = roles.get("Calls").list; 
int edit = roles.get("Calls").edit; 
int delete = roles.get("Calls").delete;