复杂xml的XML解析

时间:2013-08-21 11:15:39

标签: android xml-parsing spinner

实际上我尝试从本地主机进行xml解析并将值检索到微调器中。 我怀疑的是,我还需要检索book节点(i,e)中存在的属性内的值。我提到很多教程和源代码仍然无法做到。任何人请帮忙做。提前谢谢。

XML结构

<catalog>
    <book id="bk101">
        <author>Gambardella, Matthew</author>
        <title>XML Developer's Guide</title>
        <genre>Computer</genre>
        <price>44.95</price>
        <publish_date>2000-10-01</publish_date>
        <description>
            An in-depth look at creating applications with XML.
        </description>
    </book>
    <book id="bk102">
        <author>Ralls, Kim</author>
        <title>Midnight Rain</title>
        <genre>Fantasy</genre>
        <price>5.95</price>
        <publish_date>2000-12-16</publish_date>
        <description>
            A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world.
        </description>
    </book>
    <book id="bk103">
        <author>Corets, Eva</author>
        <title>Maeve Ascendant</title>
        <genre>Fantasy</genre>
        <price>5.95</price>
        <publish_date>2000-11-17</publish_date>
        <description>
            After the collapse of a nanotechnology society in England, the young survivors lay the foundation for a new society.
        </description>
    </book>
    <book id="bk104">
        <author>Corets, Eva</author>
        <title>Oberon's Legacy</title>
        <genre>Fantasy</genre>
        <price>5.95</price>
        <publish_date>2001-03-10</publish_date>
        <description>
            In post-apocalypse England, the mysterious agent known only as Oberon helps to create a new life for the inhabitants of London. Sequel to Maeve Ascendant.
        </description>
    </book>
</catalog>

Java代码

public class MainActivity extends Activity implements AdapterView.OnItemSelectedListener {
    ArrayList<String> title;

    Button button;
    Spinner spinner;

    ArrayAdapter<String> from_adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        title = new ArrayList<String>();

        button = (Button) findViewById(R.id.button1);
        spinner = (Spinner) findViewById(R.id.spinner1);
        spinner.setOnItemSelectedListener(this);

        button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                parse();

                from_adapter=new ArrayAdapter<String>(getBaseContext(),android.R.layout.simple_spinner_item, title);
                from_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spinner.setAdapter(from_adapter);
            }
        });
    }

    public void onItemSelected(AdapterView<?> parent, View view, int pos,
            long id) {
        Toast.makeText(parent.getContext(), ""+spinner.getSelectedItem().toString().trim(),
                Toast.LENGTH_LONG).show();
    }

    public void onNothingSelected(AdapterView<?> arg0) {
    }

    protected void parse() {
        // TODO Auto-generated method stub
        try {
            URL url = new URL(
                    "http://10.0.2.2/book.xml");
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse(new InputSource(url.openStream()));
            doc.getDocumentElement().normalize();

            NodeList nodeList = doc.getElementsByTagName("book");
            for (int i = 0; i < nodeList.getLength(); i++) {

                Node node = nodeList.item(i);     

                Element idElmnt = (Element) node;
                NodeList idList = idElmnt.getElementsByTagName("id");
                Element idElement = (Element) idList.item(0);
                idList = idElement.getChildNodes();  


                Element fstElmnt = (Element) node;
                NodeList nameList = fstElmnt.getElementsByTagName("author");
                Element nameElement = (Element) nameList.item(0);
                nameList = nameElement.getChildNodes();         


                NodeList websiteList = fstElmnt.getElementsByTagName("title");
                Element websiteElement = (Element) websiteList.item(0);
                websiteList = websiteElement.getChildNodes();

                NodeList websiteList1 = fstElmnt.getElementsByTagName("genre");
                Element websiteElement1 = (Element) websiteList1.item(0);
                websiteList1 = websiteElement1.getChildNodes();

                NodeList websiteList2 = fstElmnt.getElementsByTagName("price");
                Element websiteElement2 = (Element) websiteList2.item(0);
                websiteList2 = websiteElement2.getChildNodes();


                title.add(((Node) idList.item(0)).getNodeValue()+":"+((Node) nameList.item(0)).getNodeValue()+":"+((Node) websiteList.item(0)).getNodeValue() +"\n"+((Node) websiteList1.item(0)).getNodeValue()+"-"+((Node) websiteList2.item(0)).getNodeValue());

            }
        } catch (Exception e) {
            System.out.println("XML Pasing Excpetion = " + e);
        }

    }

1 个答案:

答案 0 :(得分:0)

在for循环中尝试此代码。

for (int i = 0; i < nodeList.getLength(); i++) {

            Node node = nodeList.item(i);     
            String value=node.getNodeValue();// you can store this in array for all nodes

            Element idElmnt = (Element) node;
            NodeList idList = idElmnt.getElementsByTagName("id");
            Element idElement = (Element) idList.item(0);
            idList = idElement.getChildNodes();  


            Element fstElmnt = (Element) node;
            NodeList nameList = fstElmnt.getElementsByTagName("author");
            Element nameElement = (Element) nameList.item(0);
            nameList = nameElement.getChildNodes();         


            NodeList websiteList = fstElmnt.getElementsByTagName("title");
            Element websiteElement = (Element) websiteList.item(0);
            websiteList = websiteElement.getChildNodes();

            NodeList websiteList1 = fstElmnt.getElementsByTagName("genre");
            Element websiteElement1 = (Element) websiteList1.item(0);
            websiteList1 = websiteElement1.getChildNodes();

            NodeList websiteList2 = fstElmnt.getElementsByTagName("price");
            Element websiteElement2 = (Element) websiteList2.item(0);
            websiteList2 = websiteElement2.getChildNodes();


            title.add(((Node) idList.item(0)).getNodeValue()+":"+((Node) nameList.item(0)).getNodeValue()+":"+((Node) websiteList.item(0)).getNodeValue() +"\n"+((Node) websiteList1.item(0)).getNodeValue()+"-"+((Node) websiteList2.item(0)).getNodeValue());

        }
    } catch (Exception e) {
        System.out.println("XML Pasing Excpetion = " + e);
    }