Android 如何从XML中读取数据并显示在ListView中?

Android 如何从XML中读取数据并显示在ListView中?,android,xml,xml-parsing,Android,Xml,Xml Parsing,我是XML新手我想从XML中读取数据我有以下XML文件格式 <country> <coordinates> <x-y> <x>150</x> <y>160</y> <cities> <city>Mumbai</city> <photos>

我是XML新手我想从XML中读取数据我有以下XML文件格式

<country>
<coordinates>
    <x-y>
        <x>150</x>
        <y>160</y>
        <cities>
            <city>Mumbai</city>
            <photos>
                <image>
                    <url>Mumbai 1</url>
                    <description>
                        <english>this 1</english>
                        <arabic>this arabic 1</arabic>
                    </description>
                </image>
                <image>
                    <url>Mumbai 2</url>
                    <description>
                        <english>this 2</english>
                        <arabic>this arabic 2</arabic>
                    </description>
                </image>
                <image>
                    <url>Mumbai 3</url>
                    <description>
                        <english>this 3</english>
                        <arabic>this arabic 3</arabic>
                    </description>
                </image>
                <image>
                    <url>Mumbai 4</url>
                    <description>
                        <english>this 4</english>
                        <arabic>this arabic 4</arabic>
                    </description>
                </image>
            </photos>
        </cities>
    </x-y>
    <x-y>
        <x>155</x>
        <y>165</y>
        <cities>
            <city>Delhi</city>
            <photos>
                <image>
                    <url>Delhi 1</url>
                    <description>
                        <english>this 1</english>
                        <arabic>this arabic 1</arabic>
                    </description>
                </image>
                <image>
                    <url>Delhi 2</url>
                    <description>
                        <english>this 2</english>
                        <arabic>this arabic 2</arabic>
                    </description>
                </image>
                <image>
                    <url>Delhi 3</url>
                    <description>
                        <english>this 3</english>
                        <arabic>this arabic 3</arabic>
                    </description>
                </image>
                <image>
                    <url>Delhi 4</url>
                    <description>
                        <english>this 4</english>
                        <arabic>this arabic 4</arabic>
                    </description>
                </image>
            </photos>
        </cities>
    </x-y>
    <x-y>
        <x>160</x>
        <y>175</y>
        <cities>
            <city>Jammu</city>
            <photos>
                <image>
                    <url>Jammu 1</url>
                    <description>
                        <english>this 1</english>
                        <arabic>this arabic 1</arabic>
                    </description>
                </image>
                <image>
                    <url>Jammu 2</url>
                    <description>
                        <english>this 2</english>
                        <arabic>this arabic 2</arabic>
                    </description>
                </image>
                <image>
                    <url>Jammu 3</url>
                    <description>
                        <english>this 3</english>
                        <arabic>this arabic 3</arabic>
                    </description>
                </image>

            </photos>
        </cities>
    </x-y>
</coordinates>

150
160
孟买
孟买1
这个1
这是阿拉伯语1
孟买2
这个2
这是阿拉伯语2
孟买3
这3
这是阿拉伯语3
孟买4
这4
这是阿拉伯语4
155
165
德里
德里1
这个1
这是阿拉伯语1
德里2
这个2
这是阿拉伯语2
德里3
这3
这是阿拉伯语3
德里4
这4
这是阿拉伯语4
160
175
查谟
查谟1号
这个1
这是阿拉伯语1
查谟2号
这个2
这是阿拉伯语2
查谟3号
这3
这是阿拉伯语3

我可以使用以下代码读取城市名称:

    public static Boolean getCityList(InputStream inputstream) {
    try {
        Log.e("getCityList", "Comming");
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = null;
        try {
            db = dbf.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Document doc = null;
        try {
            doc = db.parse(new InputSource(inputstream));
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        doc.getDocumentElement().normalize();

        NodeList nodeList = doc.getElementsByTagName("cities");

        if (nodeList.getLength() > 0) {
            Cities.initilize();
            for (int i = 0; i < nodeList.getLength(); i++) {

                Node node = nodeList.item(i);
                Element fstElmnt = (Element) node;
                NodeList nameList = fstElmnt.getElementsByTagName("city");
                Element nameElement = (Element) nameList.item(0);
                nameList = nameElement.getChildNodes();
                Log.e("City Name : ", ""+ ((Node) nameList.item(0)).getNodeValue().toString());
                Cities cities = new Cities(((Node) nameList.item(0)).getNodeValue().toString());
                Cities.sCityList.add(cities);
                }
            }
            return true;
        }
        return false;

    } catch (ClientProtocolException e) {
        return false;
    } catch (IOException e) {
        return false;
    }
} 
公共静态布尔getCityList(InputStream InputStream){ 试一试{ Log.e(“getCityList”、“Comming”); DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); DocumentBuilder db=null; 试一试{ db=dbf.newDocumentBuilder(); }捕获(ParserConfiguration异常e){ //TODO自动生成的捕捉块 e、 printStackTrace(); } 单据单据=空; 试一试{ doc=db.parse(新的InputSource(inputstream)); }捕获(SAXE异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); } doc.getDocumentElement().normalize(); NodeList NodeList=doc.getElementsByTagName(“城市”); if(nodeList.getLength()>0){ 城市。初始化(); for(int i=0;i 上面的代码从列表中读取城市。 现在我只想从图像中读取url,以及它在这个函数中的描述。
请帮助我。

我建议您使用它,它是android的lightwight解析库,可以让您非常轻松地解析XML数据。

现在您必须选择
作为父节点,因为
标记的子节点。像这样

NodeList nodeList = doc.getElementsByTagName("image");

    if (nodeList.getLength() > 0) {
        Cities.initilize();
            Node node = nodeList.item(0);
            Element fstElmnt = (Element) node;
            NodeList nameList = fstElmnt.getElementsByTagName("url");
            // Store it in your city's arraylist

        }

希望这有帮助

我不理解你的问题。如果你有这个城市,获取url应该不会有太大的不同。为此,我必须创建一个新函数,我不希望我希望在一个函数中找到所有节点,如城市阵列中的store city,该城市包含图像,因此所有图像都存储在imagearray中,而特定图像具有描述,因此将该描述全部存储在描述数组中此任务在一个函数中完成。因此,请帮助我创建该函数。谢谢@Qadir Hussair该函数在我的情况下帮助我,我几乎没有改变,并得到了解决方案。我很高兴听到它帮助了你:)