Как читать произвольный XML в универсальный объект в Android?

У меня есть целая куча источников XML, которые мне нужно прочитать. У них нет схем и, хотя они все хорошо сформированы и не содержат ничего, кроме строк, они также не разделяют структуру; Некоторые из них только на одном уровне, другие – несколько, некоторые содержат повторяющиеся блоки / записи, в то время как другие содержат кучу разных блоков, описывающих различные аспекты конкретной записи.

Раньше я использовал javax.xml.parsers.SAXParser с пользовательским обработчиком для ввода XML-данных и использовал его для установки полей пользовательского объекта, что было прекрасно, когда я читал только одну вещь, с фиксированной структурой и номером Записей, которые я знал заранее, и никаких суб-ключей или вспомогательных ключей. В PHP я прочитал бы все это в многомерном ассоциированном массиве, но Java, похоже, не имеет точного эквивалента.

Я предполагаю, что мне нужна какая-то Map или List но я не понимаю, какой тип и как ее использовать. Есть ли стандартный способ Android-y?

Вы можете иметь List Maps для имитации многомерного массива в PHP.

 List<Map<String, String>> multidimArray = new ArrayList<Map<String, String>>(); // This is the first element in Array Map<String, String> map = new HashMap<String, String>(); map.put("key1", "value1"); map.put("key2", "value2"); map.put("key3", "value3"); multidimArray.add(map); 

Существует несколько различных стандартных моделей объектов XML: вы должны использовать один из них. Эта статья Работа с XML на Android дает краткое описание некоторых вариантов для Android. DOM – это объектная модель документа, которая является наиболее широко доступной. Его API отвратителен для работы напрямую, но вы сможете запросить его с помощью XPath , что является удобным синтаксисом для доступа к различным узлам в дереве XML (см. Javax.xml.xpath | Android Developer ).