DOM解析XML实现

来源:互联网 发布:nginx反向代理配置视频 编辑:程序博客网 时间:2024/06/05 09:48

下面讲解一个DOM解析XML文件,望大家参考,可能写得比较乱,大家不要介意。

第一步:创建一个xml文件:xmltest.xml

<?xml version="1.0" encoding="utf-8"?>
<layouts>
 <layout name="mytextview">
 <text>这是一个TextView</text>
 </layout>
 <layout name="mybutton">
 <text>这是一个按钮</text>
 </layout>
</layouts>

第二步:创建一个对应上面xml文件的javabean类XMLTest.java

public class XMLTest implements Serializable{
 private static final long serialVersionUID = 1L;
 private String name;
 private String textView;
 private String button;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getTextView() {
  return textView;
 }
 public void setTextView(String textView) {
  this.textView = textView;
 }
 public String getButton() {
  return button;
 }
 public void setButton(String button) {
  this.button = button;
 }
}

第三步:编写实现解析代码:

public class XMLParseTestActivity extends Activity {
 private ListView listview;
 String xmlArray[] = null;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  listview = (ListView) findViewById(R.id.mylist);
  //调用解析xml文件后返回的集合
  List list1 = getXMLTestFromXml("xmltest.xml");
  //初始化数据大小
  xmlArray = new String[list1.size()];
  //取出集合中的信息
  for (int i = 0; i < list1.size(); i++) {
   XMLTest msg = (XMLTest) list1.get(i);
   xmlArray[i] = msg.getName() + "," + msg.getTextView();
  }
  //定义适配器
  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_1, xmlArray);
  adapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
  listview.setAdapter(adapter);
 }
 //解析xml文件的方法
 private List<XMLTest> getXMLTestFromXml(String string) {
  /*
   * 解析xml文件步骤
   * 1、声明DocumentBuilderFactory,DocumentBuilder,Document对象
   * 2、DocumentBuilderFactory对象实例化DocumentBuilder对象
   * 3、DocumentBuilder对象实例化Document对象
   */
  List<XMLTest> xmltests = new ArrayList<XMLTest>();
  DocumentBuilderFactory factory = null;
  DocumentBuilder builder = null;
  Document document = null;
  InputStream is = null;
  try {
   // 实例化factory对象
   factory = DocumentBuilderFactory.newInstance();
   // 实例化builder对象
   builder = factory.newDocumentBuilder();
   //获得xml文档并以流打开
   is = getResources().getAssets().open(string);
   //builder解析 获得文档类型
   document = builder.parse(is);
   // 找到根Element
   Element root = document.getDocumentElement();
   //获得layout为标签的集合
   NodeList nodes = root.getElementsByTagName("layout");
   // 遍历根节点所有子节点,layout下所有的layout
   XMLTest xmltest = null;
   for (int i = 0; i < nodes.getLength(); i++) {
    xmltest = new XMLTest();
    // 获取layout元素节点
    Element layoutElement = (Element) (nodes.item(i));
    // 获取layout中name的值
    xmltest.setName(layoutElement.getAttribute("name"));
    // 获取layout下的text
    Element text = (Element) layoutElement.getElementsByTagName(
      "text").item(0);
    xmltest.setTextView(text.getFirstChild().getNodeValue());

    xmltests.add(xmltest);
   }
  } 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();
  }
  return xmltests;
 }
}

显示效果如下:

 

原创粉丝点击