Учитывая приведенный ниже фрагмент XML, мне нужно получить список пар имя / значение для каждого дочернего элемента в DataElements. XPath или парсер XML нельзя использовать по независящим от меня причинам, поэтому я использую регулярное выражение.
<?xml version="1.0"?>
<StandardDataObject xmlns="myns">
<DataElements>
<EmpStatus>2.0</EmpStatus>
<Expenditure>95465.00</Expenditure>
<StaffType>11.A</StaffType>
<Industry>13</Industry>
</DataElements>
<InteractionElements>
<TargetCenter>92f4-MPA</TargetCenter>
<Trace>7.19879</Trace>
</InteractionElements>
</StandardDataObject>
Вывод, который мне нужен:
[{EmpStatus: 2.0}, {Расходы: 95465.00}, {StaffType: 11.A}, {Industry: 13}]
Имена тегов в DataElements являются динамическими и поэтому не могут быть выражены буквально в регулярном выражении. Имена тегов TargetCenter и Trace являются статическими и могут быть в регулярном выражении, но если есть способ избежать жесткого кодирования, это было бы предпочтительным.
"<([A-Za-z0-9]+?)>([A-Za-z0-9.]*?)</"
Это регулярное выражение, которое я построил, и проблема в том, что он ошибочно включает {Trace: 719879} в результаты. Полагаться на новые строки в XML или любое другое очевидное форматирование нельзя.
Ниже приведено приблизительное описание используемого Java-кода:
private static final Pattern PATTERN_1 = Pattern.compile(..REGEX..);
private List<DataElement> listDataElements(CharSequence cs) {
List<DataElement> list = new ArrayList<DataElement>();
Matcher matcher = PATTERN_1.matcher(cs);
while (matcher.find()) {
list.add(new DataElement(matcher.group(1), matcher.group(2)));
}
return list;
}
Как я могу изменить свое регулярное выражение, чтобы оно включало только элементы данных и игнорировало остальные?