1

我是在 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] -> 一个列表/数组

bbbb [g,h,i,j,k] -> 一个列表/数组

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

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

4

1 回答 1

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 代码中使用它。

希望能帮助到你,

于 2013-01-28T14:41:59.167 回答