Вы можете использовать DSM потоковую библиотеку для преобразования пары ключ-значение в список, а затем получить то, что вы хотите.
Это первый подход. Для этого вы должны определить свой файл сопоставления yaml следующим образом.
result:
type: array # result is array
path: /.+item # read item tag. the path is a regex.
fields:
key:
value:
Java-код для разбора XML:
DSM dsm=new DSMBuilder(new File("path/to/mapping.yaml")).setType(DSMBuilder.TYPE.XML).create();
List<Map<String, Object>> itemList = (List<Map<String, Object>>)dsm.toObject(xmlFileContent);
Вот список itemList , преобразованный в json.
[ {
"key" : "Application",
"value" : "MobileDevice"
}, {
"key" : "Version",
"value" : "1.0"
}, {
"key" : "Username",
"value" : "ramau"
}, {
"key" : "token",
"value" : null
}, {
"key" : "sessionID",
"value" : "SESSIONID"
}, {
"key" : "OSInformation",
"value" : "windowsXP"
} ]
Второй подход заключается в преобразовании XML в Java-карту , что ключ карты равен значение ключевого тега и значение из карта представляет собой значение тега value в XML.
Вот файл сопоставления:
result:
type: object # result is map
path: /.+multiRef # path is regex
fields:
key:
path: item/key # read value of /.+multiRef/item/key tag
value:
path: item/value # read value of /.+multiRef/item/value tag
application:
parentPath: item # assign default value when /.+multiRef/item tag is closed
default: $self.data.value # get value of value field.
filter: $self.data.key=='Application' # assign if key filed is 'Application'
version:
parentPath: item
default: $self.data.value
filter: $self.data.key=='Version'
username:
parentPath: item
default: $self.data.value
filter: $self.data.key=='Username'
token:
parentPath: item
default: $self.data.value
filter: $self.data.key=='token'
sessionID:
parentPath: item
default: $self.data.value
filter: $self.data.key=='sessionID'
OSInformation:
parentPath: item
default: $self.data.value
filter: $self.data.key=='OSInformation'
Java-код для разбора XML:
DSM dsm=new DSMBuilder(new File("path/to/mapping.yaml")).setType(DSMBuilder.TYPE.XML).create();
Map<String, Object> result = (Map<String, Object>)dsm.toObject(xmlFileContent);
String application=result.get("application").toString()
Вот JSON-представление Результата:
{
"key" : "OSInformation",
"value" : "windowsXP",
"application" : "MobileDevice",
"version" : "1.0",
"username" : "ramau",
"token" : null,
"sessionID" : "SESSIONID",
"OSInformation" : "windowsXP"
}
Сначала это немного сложно, но если вы посмотрите на документы, это очень просто.