鉴于下面的XML片段,我需要为DataElements下的每个子项获取名称/值对列表。 XPath或XML解析器不能用于我无法控制的原因,所以我正在使用正则表达式。在Java中使用REGEX解析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},{行业:13}]
标签下DataElements名称是动态的,所以不能在正则表达式中直接表达。标记名称TargetCenter和Trace是静态的,可能在正则表达式中,但是如果有一种方法可以避免硬编码,那将是更可取的。
"<([A-Za-z0-9]+?)>([A-Za-z0-9.]*?)</"
这是我构造正则表达式,它有,它错误地包括{跟踪: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;
}
如何将我的正则表达式改为只包括数据元素,而忽略其他人呢?
你为什么不使用适当的XML解析器?它会(a)更简单,并且(b)不涉及调试正则表达式。 – 2008-12-02 20:10:24
是否有使用Regex而不是仅使用XPath和XML DOM的原因? – EBGreen 2008-12-02 20:10:37
呃......交叉帖子。 :) – EBGreen 2008-12-02 20:11:12