【问题标题】:How to parse xml file on android如何在android上解析xml文件
【发布时间】:2012-02-09 15:02:30
【问题描述】:

android 有一些 dom/sax 解析器吗?

例如xml 文件:

<A>
   <B>
   </B>
   <C>
   </C>
</A>

我的文件比较复杂,但这是一个简单的例子。
android 有一些 dom/sax 解析器吗?

【问题讨论】:

标签: android xml xml-parsing


【解决方案1】:

[Android Xml解析教程][1]

         we can parse xml files in android is very simple. In market there are many xml parsers are available to parse xml data in android. But simplexml is one of the best xml parser in android.
  1. 创建一个 Android 应用项目。
  2. 从网上下载 simple-xml.jar。
  3. 准备您的 xml 文件。

员工.xml

<Employees>
   <Employee>
     <id>01</id>
     <name>jagadeesh</name>
     <salary>00000</salary>
   </Employee>
   <Employee>
     <id>02</id>
     <name>jaggubai</name>
     <salary>00000</salary>
   </Employee>
   <Employee>
     <id>03</id>
     <name>jaggudada</name>
     <salary>00000</salary>
   </Employee>
<Employees>
  1. 现在您需要创建两个 pojo 类。因为在这里我们使用了两种东西,一种是员工群体,另一种是个人员工。因此,对于员工组,我们需要创建Employees.java 并为个别员工创建Employee.java。

Employee.java

public class Employee{
    @Element
    public String id;
    @Element
    public String name;
    @Element
    public String salary;
}

Employees.java

@Root
public class Employees{
    @ElementList(inline=true, entry="Employee")
    public List<Employee> listOfEmployees;
}

【讨论】:

    【解决方案2】:


    public class SAXParserExample extends DefaultHandler{
    
    List myEmpls;
    
    private String tempVal;
    
    //to maintain context
    private Employee tempEmp;
    
    
    public SAXParserExample(){
        myEmpls = new ArrayList();
    }
    
    public void runExample() {
        parseDocument();
        printData();
    }
    
    private void parseDocument() {
    
        //get a factory
        SAXParserFactory spf = SAXParserFactory.newInstance();
        try {
    
            //get a new instance of parser
            SAXParser sp = spf.newSAXParser();
    
            //parse the file and also register this class for call backs
            sp.parse("employees.xml", this);
    
        }catch(SAXException se) {
            se.printStackTrace();
        }catch(ParserConfigurationException pce) {
            pce.printStackTrace();
        }catch (IOException ie) {
            ie.printStackTrace();
        }
    }
    
    /**
     * Iterate through the list and print
     * the contents
     */
    private void printData(){
    
        System.out.println("No of Employees '" + myEmpls.size() + "'.");
    
        Iterator it = myEmpls.iterator();
        while(it.hasNext()) {
            System.out.println(it.next().toString());
        }
    }
    
    
    //Event Handlers
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        //reset
        tempVal = "";
        if(qName.equalsIgnoreCase("Employee")) {
            //create a new instance of employee
            tempEmp = new Employee();
            tempEmp.setType(attributes.getValue("type"));
        }
    }
    
    
    public void characters(char[] ch, int start, int length) throws SAXException {
        tempVal = new String(ch,start,length);
    }
    
    public void endElement(String uri, String localName, String qName) throws SAXException {
    
        if(qName.equalsIgnoreCase("Employee")) {
            //add it to the list
            myEmpls.add(tempEmp);
    
        }else if (qName.equalsIgnoreCase("Name")) {
            tempEmp.setName(tempVal);
        }else if (qName.equalsIgnoreCase("Id")) {
            tempEmp.setId(Integer.parseInt(tempVal));
        }else if (qName.equalsIgnoreCase("Age")) {
            tempEmp.setAge(Integer.parseInt(tempVal));
        }
    
    }
    
    public static void main(String[] args){
        SAXParserExample spe = new SAXParserExample();
        spe.runExample();
    }
    

    }

    对于 xml
    <Personnel> <Employee type="permanent"> <Name>Seagull</Name> <Id>3674</Id> <Age>34</Age> </Employee> <Employee type="contract"> <Name>Robin</Name> <Id>3675</Id> <Age>25</Age> </Employee> <Employee type="permanent"> <Name>Crow</Name> <Id>3676</Id> <Age>28</Age> </Employee> </Personnel>

    查看此链接:http://www.java-samples.com/showtutorial.php?tutorialid=152

    【讨论】:

      【解决方案3】:

      是的,Android 也支持 SAXParser,代码与普通的 java 程序没有区别

      SAX 解析器使用回调函数 (org.xml.sax.helpers.DefaultHandler) 通知客户端 XML 文档结构。您应该扩展 DefaultHandler 并覆盖一些方法来实现 xml 解析。 覆盖的方法是

      • startDocument() 和 endDocument() – 在 XML 文档的开头和结尾调用的方法。
      • startElement() 和 endElement() – 在文档元素的开头和结尾调用的方法。
      • characters() – 使用 XML 文档元素的开始和结束标记之间的文本内容调用的方法。

      对于工作代码访问: XML parsing using SaxParser with complete code

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-10
        • 1970-01-01
        • 1970-01-01
        • 2019-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多