解析一个XML文件: XML解析器

本文介绍如何使用Java解析本地XML文件和网络上的XML/JSON文件,并获取其中的数据。通过创建Pull解析器,读取文件内容,解析XML/JSON节点,获取所需信息,如短信、人员和数据等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解析一个XML文件: XML解析器

public class MainActivity extends Activity implements OnClickListener {

      private  Button  bt;
    private  SmsBean sms;
    private List<SmsBean> smsList;
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
            setContentView(R.layout. activity_main);
            
             bt=(Button) findViewById(R.id. bt);
            
             bt.setOnClickListener( this);
            
      }

      /**
       * 解析 xml文件的方法
       * @param v
       */
      @Override
      public void onClick(View v) {
             try {
                   //创建pull解析器
                  XmlPullParser parser = Xml. newPullParser();
                  
                   //pull解析器配置
                  FileInputStream  fis= new FileInputStream(Environment.getExternalStorageDirectory().getPath()+ "/sms.xml");
                  parser.setInput(fis, "UTF-8");
                  
                   //开始解析,获事件的类型
                   int eventType = parser.getEventType();
                   while(eventType!=XmlPullParser. END_DOCUMENT){    //当事件类型不等于END_DOCUMENT时,继续解析
                        
                        String tageName=parser.getName(); //得到解析节点的名称
                        
                         switch (eventType) {
                         case XmlPullParser. START_TAG:    //当解析的事件是开始标签时
                               if( "Sms".equals(tageName)){
                                     smsList= new ArrayList<SmsBean>();
                               }
                               else if( "sms".equals(tageName)){
                                     sms= new SmsBean();
                                     sms.setName(parser.getAttributeValue(0));
                              }
                               else if( "address".equals(tageName)){
                                     sms.setStress(parser.nextText());
                              }
                               else if( "content".equals(tageName)){
                                     sms.setContent(parser.nextText());
                              }
                               else if( "tate".equals(tageName)){
                                     sms.setDate(Integer. parseInt(parser.nextText()));
                              }
                              
                              
                               break;

                         case XmlPullParser. END_TAG:
                               if( "Sms".equals(tageName)){
                                     smsList.add( sms);
                                     sms= null;
                                    
                              }
                              
                              
                               break;
                        }
                        
                        
                        
                        
                  }
                  
                   //继续往下解析
                  eventType=parser.next();
                  
                  
                  
            } catch (Exception e) {
               e.printStackTrace();
            }
            
      
             sms.toString();
            
      }
      
      
  }




--------------------------------------------------------------------------------------------------

解析网络上xml文件和json文件:

public class PersonService {

      public List<Person> getPersonsByXML() throws Exception {
            URL url = new URL("http://192.168.1.100:8080/05.Web/persons.xml" );
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(3000);
            
             int code = conn.getResponseCode();
             if (code == 200) {
                  InputStream in = conn.getInputStream();
                   return parseXML(in);
            }
             throw new RuntimeException( "网络异常: " + code);
      }

      /**
       * 解析网络上的 xml文件
       * @param in
       * @return
       * @throws Exception
       */
      private List<Person> parseXML(InputStream in) throws Exception {
            XmlPullParser parser = Xml. newPullParser();
            parser.setInput(in, "UTF-8");
            
            List<Person> list = new ArrayList<Person>();
            Person p = null;
            
             for ( int type = parser.getEventType(); type != XmlPullParser.END_DOCUMENT; type = parser.next()) {
                   if (type == XmlPullParser. START_TAG) {
                         if ( "person".equals(parser.getName())) {
                              p = new Person();
                              String id = parser.getAttributeValue(0);
                              p.setId(Integer. parseInt(id));
                              list.add(p);
                        } else if ( "name".equals(parser.getName())) {
                              String name = parser.nextText();
                              p.setName(name);
                        } else if ( "age".equals(parser.getName())) {
                              String age = parser.nextText();
                              p.setAge(Integer. parseInt(age));
                        }
                  }
            }
            
             return list;
      }

      /**
       * 解析网络上的 json文件
       * @return
       * @throws Exception
       */
      public List<Person> getPersonsByJSON() throws Exception {
            URL url = new URL("http://192.168.1.100:8080/05.Web/persons.js" );
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(3000);
            
             int code = conn.getResponseCode();
             if (code == 200) {
                  InputStream in = conn.getInputStream();
                   return parseJSON(in);
            }
             throw new RuntimeException( "网络异常: " + code);
      }

      private List<Person> parseJSON(InputStream in) throws Exception {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
             byte[] buffer = new byte[8192];
             int length;
             while ((length = in.read(buffer)) != -1)
                  out.write(buffer, 0, length);
            in.close();
            out.close();
            
            String json = new String(out.toByteArray());
            List<Person> list = new ArrayList<Person>();
            JSONArray arr = new JSONArray(json);                   // 把String封装成JSON数组
             for ( int i = 0; i < arr.length(); i++) {         // 遍历JSON数组
                  JSONObject obj = arr.getJSONObject(i);           // 获取每个JSON对象
                  Person p = new Person();                              
                  p.setId(obj.getInt( "id"));                             // 从JSON对象中获取"id"字段的值
                  p.setName(obj.getString( "name"));
                  p.setAge(obj.getInt( "age"));
                  list.add(p);
            }
             return list;
      }

}





 

package com.hexiang.utils; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /** * 本类是专门解析XML文件的,主要用于为系统读取自己的配置文件时提供最方便的解析操作 * @author HX * */ public class XmlManager { /** * 得到某节点下某个属性的值 * @param element 要获取属性的节点 * @param attributeName 要取值的属性名称 * @return 要获取的属性的值 * @author HX_2010-01-12 */ public static String getAttribute( Element element, String attributeName ) { return element.getAttribute( attributeName ); } /** * 获取指定节点下的文本 * @param element 要获取文本的节点 * @return 指定节点下的文本 * @author HX_2010-01-12 */ public static String getText( Element element ) { return element.getFirstChild().getNodeValue(); } /** * 解析某个xml文件,并在内存中创建DOM树 * @param xmlFile 要解析XML文件 * @return 解析某个配置文件后的Document * @throws Exception xml文件不存在 */ public static Document parse( String xmlFile ) throws Exception { // 绑定XML文件,建造DOM树 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document domTree = db.parse( xmlFile ); return domTree; } /** * 获得某节点下的某个子节点(指定子节点名称,和某个属性的值) * 即获取parentElement下名字叫childName,并且属性attributeName的值为attributeValue的子结点 * @param parentElement 要获取子节点的那个父节点 * @param childName 要获取的子节点名称 * @param attributeName 要指定的属性名称 * @param attributeValue 要指定的属性的值 * @return 符合条件的子节点 * @throws Exception 子结点不存在或有多个符合条件的子节点 * @author HX_2008-12-01 */ public static Element getChildElement( Element parentElement, String childName, String attributeName, String attributeValue ) throws Exception { NodeList list = parentElement.getElementsByTagName( childName ); int count = 0; Element curElement = null; for ( int i = 0 ; i < list.getLength() ; i ++ ) { Element child = ( Element )list.item( i ); String value = child.getAttribute( attributeName ); if ( true == value.equals( attributeValue ) ) { curElement =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值