Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Парсинг XML в Android

#android #sax #dom


Подскажите, пожалуйста, мне необходимо распарсть простую XML'ку вида:


  
   Gu
 

Подскажите, как сделать это проще? Мб есть какой-то простой класс для париснга? Где-то
видел аналог php'шной simplexml, но теперь найти не могу    


Ответы

Ответ 1



Я бы написал простейший парсер на основе SAX примерно так (написано на коленках, так что просьба помидорами не кидаться!) factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(false); xpp = factory.newPullParser(); StringReader sw=new StringReader(s); //s содержит ваш XML xpp.setInput(sw); //подаем на вход парсера int eventType = xpp.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_TAG) //начальный тег { inBuilding=false; if(xpp.getName().compareTo("status")==0) code = xpp.getAttributeValue(null, "code"); //читаем атрибут code else if(xpp.getName().compareTo("building")==0) { number = xpp.getAttributeValue(null, "number"); part = xpp.getAttributeValue(null, "part"); url = xpp.getAttributeValue(null, "url"); inBuilding=true; } } else if(eventType==XmlPullParser.TEXT) { if(inBuilding) //если мы внутри тега building buildingValue=xpp.getText(); } eventType=xpp.next(); } Естественно, значения атрибутов, полей и проч. после прочтения надо куда-то складывать. Ну вы уж там сами дальше :)

Ответ 2



В Java много средств для работы с XML. Работа с XML в Android Использование XML и JSON с Android: Часть 1. Преимущества JSON и XML для Android-приложений Использование XML и JSON с Android: Часть 2. Создание гибридных Android-приложений с применением JSON Пример десериализации с помощью Simple Serializer s = new Persister(); Example e = s.read(Example.class, new File("example.xml"));

Ответ 3



XmlPullParser XML Pull Parser is an interface that defines parsing functionality...

Ответ 4



Почитайте тут: http://www.ibm.com/developerworks/opensource/library/x-android/ Ещё вариант: //вспомогательный метод - получает содержимое тэга String getTagValue(String sTag, Element eElement) { NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes(); Node nValue = (Node) nlList.item(0); return nValue.getNodeValue(); } void test() { File xmlFile = new File(PathToFile); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(fXmlFile); doc.getDocumentElement().normalize(); doc.getDocumentElement().getNodeName(); //имя корневого тэга NodeList nList = doc.getElementsByTagName("building"); //получаем все теги building for (int nodeIndex = 0; nodeIndex < nList.getLength(); temp++) { //пробегаем тэги Node nNode = nList.item(temp); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; getTagValue("building", eElement); //получить содержимое текущего тэга eElement.getAttribute("number"); //получить значение аттрибута } } }

Комментариев нет:

Отправить комментарий