给定以下 XML 片段,我需要获取 DataElements 下每个子项的名称/值对列表。由于某些原因,无法使用 XPath 或 XML 解析器,因此我正在使用正则表达式。
我需要的输出是: [{EmpStatus:2.0}, {Expenditure:95465.00}, {StaffType:11.A}, {Industry:13}]
DataElements下的标签名称是动态的,因此无法在正则表达式中直接表示。标签名称TargetCenter和Trace是静态的,并且可以在正则表达式中使用,但如果有避免硬编码的方法,那将是更可取的。
我该如何修改正则表达式,只包含数据元素而忽略其他内容?
<?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}, {Expenditure: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;
}
我该如何修改正则表达式,只包含数据元素而忽略其他内容?