2012-12-05 149 views
1

我是在android中读取xml文件的新手。我查了谷歌这一点,但无法得到一个适当的解决方案。在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 /生/文件夹,如果是的话,这将是该文件的地址?)

+0

http://developer.android.com/training/basics/network-ops/xml.html ..一个很好的教程XML解析 – stinepike

+1

http://www.javacodegeeks.com /2012/01/xml-parsing-using-saxparser-with.html也是一个goo教程。 –

回答

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; 

} 



} 

为了anserw你关于res/raw /文件夹的问题。是的,你必须把你的XML放在该文件夹中,并通过R类在Java代码中使用它。

希望它能帮助,