在android中读取xml文件 - 解析

时间:2012-12-05 03:39:48

标签: android xml string list xml-parsing

我是Android中读取xml文件的新手。我为此查了谷歌,但无法得到合适的解决方案。

我希望解析这个xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>aaaa</key>
        <array>
                <string>b</string>
                <string>c</string>
                <string>d</string>
                <string>e</string>
                <string>f</string>
        </array>
        <key>bbbb</key>
        <array>
                <string>g</string>
                <string>h</string>
                <string>i</string>
                <string>j</string>
                <string>k</string>
        </array>
</dict>
</plist>

解析后,我希望获得以下对应关系:

aaaa [b,c,d,e,f] - &gt;列表/数组

bbbb [g,h,i,j,k] - &gt;列表/数组

换句话说,每个字符串(键)应该对应于该键内的字符串数组。

我该怎么办?另外,我想知道我应该在哪里放置xml文件。 (它是在res / raw /文件夹中吗?如果是,那么该文件的地址是什么?)

1 个答案:

答案 0 :(得分:2)

第一次自己动手:

public final class XMLManager {


public static HashMap<String, ArrayList<String>> getHmPlist(){

    HashMap<String, ArrayList<String>> hmPlist = null;

    try {


        hmPlist = new HashMap<>();
        Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("D:\\Loic_Workspace\\Test2\\res\\test.xml"));
        NodeList ndList = doc.getElementsByTagName("key");
        Integer keyLength = ndList.getLength();
        String keyValue = null;
        NodeList ndArray = null;
        Integer ndArrayLength = null;
        ArrayList<String> alElement = null;

        for(int i=0;i<keyLength;i++){
            alElement = new ArrayList<>();
            keyValue = ndList.item(i).getTextContent();
            if(keyValue != null){
                ndArray = ndList.item(i).getNextSibling().getNextSibling().getChildNodes();
                ndArrayLength = ndArray.getLength();
                for(int j=0;j<ndArrayLength;j++){

                    if(ndArray.item(j).getNodeName().equalsIgnoreCase("string")){
                        alElement.add(ndArray.item(j).getFirstChild().getTextContent());
                    }

                }

                hmPlist.put(keyValue, alElement);

            }

        }


    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return hmPlist;

}



}

为了解决有关res / raw /文件夹的问题。是的,您必须将XML放在该文件夹中,并通过R类在Java代码中使用它。

希望它有所帮助,