Хэш-карта из XML-строки - Android - PullRequest
1 голос
/ 29 марта 2012

Я храню данные XML в строке в пользовательских настройках.Я хочу создать хэш-карту из этой строки XML.Помогите мне, пожалуйста;вот моя строка xml;

    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 ]

2 голосов
/ 29 марта 2012

вы можете сделать с помощью узла List

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);
    }
}

Как динамически обновлять XML

0 голосов
/ 02 апреля 2012

Благодарю за ответ @ Riddhish.Chaudhari.Да, NodeList был фактическим решением моего требования. Вот как я это решил ..

public static HashMap<String, Role> roles = null;
public static String user_roles = null;

, затем я реализовал следующую функцию;

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());
    } 
}

Я добавил следующий класс в свой проект проекта, который хранит данные из xml в объекте Role () в вышеуказанной функции;

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;
...