Android 如何使用DOM解析器XML将数据转储到Spinner和ListView

Android 如何使用DOM解析器XML将数据转储到Spinner和ListView,android,xml,listview,dom,spinner,Android,Xml,Listview,Dom,Spinner,我有一个问题,希望您能提供帮助,现在我可以将XML DOM中的数据读取到Spinner或ListView,但我需要 放置在微调器上的XML标记的标题(注意不要重叠) ListView中包含的其他信息 每次我在Spinner中选择Title时,只会以XML格式显示该标题下的员工 你怎么知道的? 我的XML文件: <?xml version="1.0" encoding="utf-8"?> <employees> <employee id ="1" titl

我有一个问题,希望您能提供帮助,现在我可以将XML DOM中的数据读取到Spinner或ListView,但我需要

  • 放置在微调器上的XML标记的标题(注意不要重叠)
  • ListView中包含的其他信息
  • 每次我在Spinner中选择Title时,只会以XML格式显示该标题下的员工
你怎么知道的? 我的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<employees>
    <employee id ="1" title="Human Resources Department ">
        <name>Name A</name>
        <phone>0909000111</phone>
    </employee>
    <employee id ="1" title="Human Resources Department ">
        <name>Name B</name>
        <phone>0909000112</phone>
    </employee>
    <employee id ="2" title="Technical Department ">
        <name>Name A - 2</name>
        <phone>0909000222</phone>
    </employee>
    <employee id ="2" title="Human Resources Department ">
        <name>Name B - 2</name>
        <phone>0909000223</phone>
    </employee>
    <employee id ="3" title="Sales Office ">
        <name>Name C - 1</name>
        <phone>0909000333</phone>
    </employee>
    <employee id ="3" title="Sales Office ">
        <name>Name C - 2</name>
        <phone>0909000333</phone>
    </employee>    
</employees>
班级部

 package com.example.bai29_tulam;

    import java.util.ArrayList;

    import android.app.Activity;

    public class Department extends Gods{
        public ArrayList<Employee>listEmploy=null;
        public Department(String id,String name){
            super(id,name);
            this.listEmploy=new ArrayList<Employee>();
        }
        public Department(){
            super();
            this.listEmploy=new ArrayList<Employee>();
        }

        public boolean addEmploy(Employee employee){
            employee.setDeparment(this);
            return listEmploy.add(employee);
        }
        public ArrayList<Employee>getListEmployee(){
            return this.listEmploy;

        }
        public int size(){
            return listEmploy.size();
        }
        public Employee get(int i){
            return listEmploy.get(i);
        }

    }
课堂活动

package com.example.bai29_tulam;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
    Button btn_DOM, btn_SAX;
    Spinner spin;
    ListView lisview;
    EditText editData;
    TextView textData;
    ArrayList<Employee> arrList = new ArrayList<Employee>();
    ArrayAdapter<Employee> adapter;

    ArrayList<Department> arrSpin = new ArrayList<Department>();
    ArrayAdapter<Department> adapSpin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // editData = (EditText) findViewById(R.id.editData);
        spin = (Spinner) findViewById(R.id.spinner);
        adapSpin = new ArrayAdapter<Department>(this,
                android.R.layout.simple_spinner_item, arrSpin);
        adapSpin.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spin.setAdapter(adapSpin);
        spin.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
                loadListEmployeeByDepartment(arrSpin.get(position));
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub

            }
        });

        lisview = (ListView) findViewById(R.id.listView);
        adapter = new ArrayAdapter<Employee>(this,
                android.R.layout.simple_list_item_1, arrList);
        lisview.setAdapter(adapter);

        btn_DOM = (Button) findViewById(R.id.btn_DOM);
        btn_SAX = (Button) findViewById(R.id.btn_SAX);
        btn_DOM.setOnClickListener(this);
        btn_SAX.setOnClickListener(this);
    }

    protected void loadListEmployeeByDepartment(Department department) {
        // TODO Auto-generated method stub
        // arrList.clear();
        arrList.addAll(department.getListEmployee());
        adapSpin.notifyDataSetChanged();
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.btn_DOM:
            loadDataDOM();
            break;
        case R.id.btn_SAX:
            loadDataSAX();
            break;
        }
    }

    private void loadDataSAX() {
        // TODO Auto-generated method stub

    }

    private void loadDataDOM() {
        // TODO Auto-generated method stub

        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = dbf.newDocumentBuilder();
            // Create Path File
            String sdcard = Environment.getExternalStorageDirectory()
                    .getAbsolutePath();
            String xmfile = sdcard + "/employee.xml";
            FileInputStream fIn = new FileInputStream(xmfile);
            //Creat Document from builder to parser FileInput
            Document doc = builder.parse(fIn);
            //browse element from doc
            Element root = doc.getDocumentElement();
            NodeList list = root.getChildNodes();

            for (int i = 0; i < list.getLength(); i++) {
                Node node = list.item(i);
                if (node instanceof Element) {
                    Element employee = (Element) node;
                    String id = employee.getAttribute("id");
                    String title = employee.getAttribute("title");
                    String temp = id + title;
                    NodeList listChild = employee.getElementsByTagName("name");
                    String name = listChild.item(0).getTextContent();
                    listChild = employee.getElementsByTagName("phone");
                    String phone = listChild.item(0).getTextContent();
                    Department dp = new Department();
                    dp.setId(id);
                    dp.setName(title);
                    if (temp.trim().equalsIgnoreCase(dp.toString())) {
                        Employee nvcpb = new Employee();
                        nvcpb.setId(name);
                        nvcpb.setName(phone);
                        nvcpb.setDeparment(dp);
                        arrList.add(nvcpb);
                    } else {

                    }

                    arrSpin.add(dp);
                    // arrSpin.add(nameSpin);
                }

            }
            adapSpin.notifyDataSetChanged();
            // textData.setText(datashow);

        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
package com.example.bai29_tulam;
导入java.io.FileInputStream;
导入java.io.IOException;
导入java.util.ArrayList;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
导入org.w3c.dom.Node;
导入org.w3c.dom.NodeList;
导入org.xml.sax.SAXException;
导入android.app.Activity;
导入android.os.Bundle;
导入android.os.Environment;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemSelectedListener;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.Spinner;
导入android.widget.TextView;
导入android.widget.Toast;
公共类MainActivity扩展活动实现OnClickListener{
按钮btn_DOM,btn_SAX;
旋转器旋转;
ListView;
编辑文本编辑数据;
文本视图文本数据;
ArrayList arrList=新的ArrayList();
阵列适配器;
ArrayList arrSpin=新的ArrayList();
ArrayaAdapspin;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//editData=(EditText)findViewById(R.id.editData);
spin=(微调器)findViewById(R.id.Spinner);
adapSpin=新阵列适配器(此,
android.R.layout.simple\u微调器\u项目,arrSpin);
adapSpin.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
转固转接器(adapSpin);
spin.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图、,
内部位置,长id){
//TODO自动生成的方法存根
loadListEmployeeByDepartment(arrSpin.get(position));
}
@凌驾
未选择公共无效(AdapterView父级){
//TODO自动生成的方法存根
}
});
lisview=(ListView)findViewById(R.id.ListView);
适配器=新阵列适配器(此,
android.R.layout.simple_list_item_1,arrList);
setAdapter(适配器);
btn_DOM=(按钮)findviewbyd(R.id.btn_DOM);
btn_SAX=(按钮)findViewById(R.id.btn_SAX);
btn_DOM.setOnClickListener(这个);
btn_SAX.setOnClickListener(这个);
}
受保护的void loadlistedemployeebydepartment(部门){
//TODO自动生成的方法存根
//arrList.clear();
arrList.addAll(department.getListEmployee());
adapSpin.notifyDataSetChanged();
}
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
开关(v.getId()){
案例R.id.btn\U DOM:
loadDataDOM();
打破
案例R.id.btn\U SAX:
loadDataSAX();
打破
}
}
私有void loadDataSAX(){
//TODO自动生成的方法存根
}
私有void loadDataDOM(){
//TODO自动生成的方法存根
试一试{
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder=dbf.newDocumentBuilder();
//创建路径文件
字符串sdcard=Environment.getExternalStorageDirectory()
.getAbsolutePath();
字符串xmfile=sdcard+“/employee.xml”;
FileInputStream fIn=新的FileInputStream(xmfile);
//从生成器到解析器FileInput创建文档
文档doc=builder.parse(fIn);
//从文档浏览元素
元素根=doc.getDocumentElement();
NodeList list=root.getChildNodes();
对于(int i=0;i package com.example.bai29_tulam;

    import android.app.Activity;

    public class Employee extends Gods{
        private Department dp;
        public Department getDepartment(){
            return dp;
        }
        public void setDeparment(Department depart){

            this.dp=depart;
        }
        public Employee(String id,String name, Department depart){
            super(id,name);
            this.dp=depart;
        }
        public Employee(String id,String name){
            super(id,name);

        }
        public Employee(){
            super();
        }

    }
package com.example.bai29_tulam;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
    Button btn_DOM, btn_SAX;
    Spinner spin;
    ListView lisview;
    EditText editData;
    TextView textData;
    ArrayList<Employee> arrList = new ArrayList<Employee>();
    ArrayAdapter<Employee> adapter;

    ArrayList<Department> arrSpin = new ArrayList<Department>();
    ArrayAdapter<Department> adapSpin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // editData = (EditText) findViewById(R.id.editData);
        spin = (Spinner) findViewById(R.id.spinner);
        adapSpin = new ArrayAdapter<Department>(this,
                android.R.layout.simple_spinner_item, arrSpin);
        adapSpin.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spin.setAdapter(adapSpin);
        spin.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
                loadListEmployeeByDepartment(arrSpin.get(position));
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub

            }
        });

        lisview = (ListView) findViewById(R.id.listView);
        adapter = new ArrayAdapter<Employee>(this,
                android.R.layout.simple_list_item_1, arrList);
        lisview.setAdapter(adapter);

        btn_DOM = (Button) findViewById(R.id.btn_DOM);
        btn_SAX = (Button) findViewById(R.id.btn_SAX);
        btn_DOM.setOnClickListener(this);
        btn_SAX.setOnClickListener(this);
    }

    protected void loadListEmployeeByDepartment(Department department) {
        // TODO Auto-generated method stub
        // arrList.clear();
        arrList.addAll(department.getListEmployee());
        adapSpin.notifyDataSetChanged();
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.btn_DOM:
            loadDataDOM();
            break;
        case R.id.btn_SAX:
            loadDataSAX();
            break;
        }
    }

    private void loadDataSAX() {
        // TODO Auto-generated method stub

    }

    private void loadDataDOM() {
        // TODO Auto-generated method stub

        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = dbf.newDocumentBuilder();
            // Create Path File
            String sdcard = Environment.getExternalStorageDirectory()
                    .getAbsolutePath();
            String xmfile = sdcard + "/employee.xml";
            FileInputStream fIn = new FileInputStream(xmfile);
            //Creat Document from builder to parser FileInput
            Document doc = builder.parse(fIn);
            //browse element from doc
            Element root = doc.getDocumentElement();
            NodeList list = root.getChildNodes();

            for (int i = 0; i < list.getLength(); i++) {
                Node node = list.item(i);
                if (node instanceof Element) {
                    Element employee = (Element) node;
                    String id = employee.getAttribute("id");
                    String title = employee.getAttribute("title");
                    String temp = id + title;
                    NodeList listChild = employee.getElementsByTagName("name");
                    String name = listChild.item(0).getTextContent();
                    listChild = employee.getElementsByTagName("phone");
                    String phone = listChild.item(0).getTextContent();
                    Department dp = new Department();
                    dp.setId(id);
                    dp.setName(title);
                    if (temp.trim().equalsIgnoreCase(dp.toString())) {
                        Employee nvcpb = new Employee();
                        nvcpb.setId(name);
                        nvcpb.setName(phone);
                        nvcpb.setDeparment(dp);
                        arrList.add(nvcpb);
                    } else {

                    }

                    arrSpin.add(dp);
                    // arrSpin.add(nameSpin);
                }

            }
            adapSpin.notifyDataSetChanged();
            // textData.setText(datashow);

        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}