我是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 /文件夹中吗?如果是,那么该文件的地址是什么?)
答案 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代码中使用它。
希望它有所帮助,