Java 在Android中从XML解析的数组中搜索
我将这个XML文件解析为ArrayList 在这个ArrayList中,我有国家和其中国家的报警号码 我想搜索一个国家,找到警察、救护车或消防队员。号码 下面是帮助您解决问题的代码 将XML解析为ArrayList:Java 在Android中从XML解析的数组中搜索,java,android,xml,arrays,parsing,Java,Android,Xml,Arrays,Parsing,我将这个XML文件解析为ArrayList 在这个ArrayList中,我有国家和其中国家的报警号码 我想搜索一个国家,找到警察、救护车或消防队员。号码 下面是帮助您解决问题的代码 将XML解析为ArrayList: protected ArrayList<Alarmdiensten> getAlarmdiensten() { ArrayList<Alarmdiensten> lijst = new ArrayList<Alarmdiensten>(
protected ArrayList<Alarmdiensten> getAlarmdiensten() {
ArrayList<Alarmdiensten> lijst = new ArrayList<Alarmdiensten>();
try {
DocumentBuilder builder =DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(getAssets().open("alarmdiensten.xml"));
NodeList nl = doc.getElementsByTagName("land");
for (int i=0;i<nl.getLength();i++) {
Node node = nl.item(i);
Alarmdiensten land = new Alarmdiensten();
land.land = Xml.innerHtml(Xml.getChildByTagName(node, "naam"));
land.landcode = Xml.innerHtml(Xml.getChildByTagName(node, "code"));
land.politie = Xml.innerHtml(Xml.getChildByTagName(node, "politie"));
land.ambulance = Xml.innerHtml(Xml.getChildByTagName(node, "ambulance"));
land.brandweer = Xml.innerHtml(Xml.getChildByTagName(node, "brandweer"));
land.telamba = Xml.innerHtml(Xml.getChildByTagName(node, "telamba"));
land.adresamba = Xml.innerHtml(Xml.getChildByTagName(node, "adresamba"));
lijst.add(land);
}
} catch (Exception e) {;
}
return lijst;
}
protectedarraylist getAlarmdiensten(){
ArrayList lijst=新的ArrayList();
试一试{
DocumentBuilder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc=builder.parse(getAssets().open(“alarmdiensten.xml”);
NodeList nl=doc.getElementsByTagName(“land”);
for(int i=0;i使用for循环并搜索它
for(Alarmdiensten land :diensten){
if(land.landcode.equals(landcode) ){
// yes i got it, The current land.
break;
}
}
使用for循环并搜索它
for(Alarmdiensten land :diensten){
if(land.landcode.equals(landcode) ){
// yes i got it, The current land.
break;
}
}
只需迭代列表:
String landcode = getLandCode();
for (Alarmdiensten dienst:diensten) {
if (dienst.landcode.equals(landcode)) {
// do what has to be done
}
}
如果必须更频繁地查找值,请考虑使用映射而不是列表:
Map<String, List<Alarmdiensten>> servicesInCountry
= new HashMap<String, List<Alarmdiensten>>();
for (Alarmdiensten dienst:diensten) {
List<Alarmdiensten> list = servicesInCountry.get(dienst.landcode);
if (list == null) {
list = new ArrayList<Alarmdiensten>();
servicesInCountry.put(dienst.landcode, list);
}
list.add(dienst);
}
// ... and later on
List<Alarmdiensten> servicesInSweden = servicesInCountry.get("SWE");
地图服务国家/地区
=新HashMap();
用于(Alarmdiensten dienst:diensten){
List List=servicesInCountry.get(dienst.landcode);
if(list==null){
列表=新的ArrayList();
服务国家/地区放置(dienst.landcode,列表);
}
列表。添加(dienst);
}
//……后来
List servicesInSweden=servicesInCountry.get(“SWE”);
只需在列表上迭代:
String landcode = getLandCode();
for (Alarmdiensten dienst:diensten) {
if (dienst.landcode.equals(landcode)) {
// do what has to be done
}
}
如果必须更频繁地查找值,请考虑使用映射而不是列表:
Map<String, List<Alarmdiensten>> servicesInCountry
= new HashMap<String, List<Alarmdiensten>>();
for (Alarmdiensten dienst:diensten) {
List<Alarmdiensten> list = servicesInCountry.get(dienst.landcode);
if (list == null) {
list = new ArrayList<Alarmdiensten>();
servicesInCountry.put(dienst.landcode, list);
}
list.add(dienst);
}
// ... and later on
List<Alarmdiensten> servicesInSweden = servicesInCountry.get("SWE");
地图服务国家/地区
=新HashMap();
用于(Alarmdiensten dienst:diensten){
List List=servicesInCountry.get(dienst.landcode);
if(list==null){
列表=新的ArrayList();
服务国家/地区放置(dienst.landcode,列表);
}
列表。添加(dienst);
}
//……后来
List servicesInSweden=servicesInCountry.get(“SWE”);
目前,您已经有了Alarmdiensten对象的ArrayList。我建议您可能希望将其更改为地图,以便存储一张土地代码与Alarmdiensten对象的地图
这样,您就可以使用landcode从地图中获取Alarmdiensten,然后只需在Alarmdiensten对象上调用getPolitie()etc方法
我会确保封装Alarmdiensten对象,顺便说一句,直接访问它的私有成员有点不允许:)
比如:
protected Map<String, Alarmdiensten> getAlarmdiensten()
{
Map<String, Alarmdiensten> alarmNumbersForCountries
= new HashMap<String, Alarmdiensten>();
try
{
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(getAssets().open("alarmdiensten.xml"));
NodeList nl = doc.getElementsByTagName("land");
for (int i = 0; i < nl.getLength(); i++)
{
Node node = nl.item(i);
Alarmdiensten land = new Alarmdiensten();
land.setLand(Xml.innerHtml(Xml.getChildByTagName(node, "naam")));
land.setLandcode(Xml.innerHtml(Xml.getChildByTagName(node, "code")));
land.setPolitie(Xml.innerHtml(Xml.getChildByTagName(node, "politie")));
land.setAmbulance(Xml.innerHtml(Xml.getChildByTagName(node, "ambulance")));
land.setBrandweer(Xml.innerHtml(Xml.getChildByTagName(node, "brandweer")));
land.setTelamba(Xml.innerHtml(Xml.getChildByTagName(node, "telamba")));
land.setAdresamba(Xml.innerHtml(Xml.getChildByTagName(node, "adresamba")));
alarmNumbersForCountries.put(land.getLandCode(), land);
}
}
catch (Exception e)
{
// Handle Exception
}
return alarmNumbersForCountries;
}
YMMV的另一个观点是,您可能希望将方法中从XML解析构建Alarmdiensten对象的部分分离出来。“每个方法都应该做好一件事和一件事。”目前,您已经有了Alarmdiensten对象的ArrayList。我建议您可能希望将其更改为地图,以便您存储一张土地代码与Alarmdiensten对象的地图
这样,您就可以使用landcode从地图中获取Alarmdiensten,然后只需在Alarmdiensten对象上调用getPolitie()etc方法
我会确保封装Alarmdiensten对象,顺便说一句,直接访问它的私有成员有点不允许:)
比如:
protected Map<String, Alarmdiensten> getAlarmdiensten()
{
Map<String, Alarmdiensten> alarmNumbersForCountries
= new HashMap<String, Alarmdiensten>();
try
{
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(getAssets().open("alarmdiensten.xml"));
NodeList nl = doc.getElementsByTagName("land");
for (int i = 0; i < nl.getLength(); i++)
{
Node node = nl.item(i);
Alarmdiensten land = new Alarmdiensten();
land.setLand(Xml.innerHtml(Xml.getChildByTagName(node, "naam")));
land.setLandcode(Xml.innerHtml(Xml.getChildByTagName(node, "code")));
land.setPolitie(Xml.innerHtml(Xml.getChildByTagName(node, "politie")));
land.setAmbulance(Xml.innerHtml(Xml.getChildByTagName(node, "ambulance")));
land.setBrandweer(Xml.innerHtml(Xml.getChildByTagName(node, "brandweer")));
land.setTelamba(Xml.innerHtml(Xml.getChildByTagName(node, "telamba")));
land.setAdresamba(Xml.innerHtml(Xml.getChildByTagName(node, "adresamba")));
alarmNumbersForCountries.put(land.getLandCode(), land);
}
}
catch (Exception e)
{
// Handle Exception
}
return alarmNumbersForCountries;
}
YMMV的另一个观点是,您可能希望将方法中从XML解析中构建Alarmdiensten对象的部分分离出来。“每个方法都应该做好一件事和一件事。”Tnx我使用了Martijd提供的示例映射示例,它可以工作:)Tnx我使用了Martijd提供的示例映射示例,它可以工作:)