Вы можете использовать Декларативное потоковое сопоставление (DSM) библиотека синтаксического анализа потока для простого анализа сложного XML. это проще, чем SAX.
Вы просто определяете отображение для данных, которые вы хотите извлечь из XML
Вот определения определений для вашего XML.
result:
type: array
path: /restaurants/restaurant
fields:
street:
title:
hall:
menus:
path: menu/dish
type: array
fields:
name:
price: long
currency:
xml:
attribute: true
Java-код для анализа XML:
DSM dsm=new DSMBuilder(new File("path/to/mapping.yaml")).setType(DSMBuilder.TYPE.XML).create();
Object result= dsm.toObject(xmlFileContent);
// json represntation fo result
dsm.getObjectMapper().writerWithDefaultPrettyPrinter().writeValue(System.out, object);
Вот вывод:
[ {
"street" : "Street1",
"title" : "Restaurant1",
"hall" : "10",
"menus" : [ {
"name" : "Dish1",
"price" : 100
}, {
"name" : "Dish2",
"price" : 200
}, {
"name" : "Dish3",
"price" : 300
} ]
}, {
"street" : "Street2",
"title" : "Restaurant2",
"hall" : "20",
"menus" : [ {
"name" : "Dish4",
"price" : 400
}, {
"name" : "Dish5",
"price" : 500
}, {
"name" : "Dish6",
"price" : 600
} ]
}, {
"street" : "Street3",
"title" : "Restaurant3",
"hall" : "30",
"menus" : [ {
"name" : "Dish7",
"price" : 700
}, {
"name" : "Dish8",
"price" : 800
}, {
"name" : "Dish9",
"price" : 900
} ]
} ]
Если вы хотите напрямую десериализовать класс POJO, это возможнос DSM