Как разобрать XML-файл на Android - PullRequest
2 голосов
/ 13 января 2012

Есть ли у Android парсеры dom / sax?

Например, XML-файл:

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

Мой файл более сложный, но это простой пример.
Есть ли у Androidесть какой-нибудь синтаксический анализатор dom / sax?

Ответы [ 3 ]

1 голос
/ 26 февраля 2015

[Руководство по синтаксическому анализу 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-файл.

Employee.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>
Теперь вам нужно создать два класса 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;
}
1 голос
/ 13 января 2012

Да, Android также поддерживает SAXParser , и код не будет отличаться от обычной Java-программы.

Анализатор SAX использует функцию обратного вызова (org.xml.sax.helpers.DefaultHandler) информирует клиентов о структуре документа XML.Вы должны расширить DefaultHandler и переопределить несколько методов для достижения анализа XML.Методы для переопределения:

  • startDocument () и endDocument () - метод, вызываемый в начале и в конце XML-документа.
  • startElement () и endElement () - Метод, вызываемый в начале и конце элемента документа.
  • characters () - Метод, вызываемый с текстовым содержимым между начальным и конечным тегами элемента XML-документа.

Для посещения рабочего кода: Синтаксический анализ XML с использованиемSaxParser с полным кодом

0 голосов
/ 13 января 2012


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...