鑑於下面的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