【发布时间】:2016-06-30 12:26:16
【问题描述】:
我有一个包含以下内容的 StringBuffer 对象:
<ET>read input: 1.629ms</ET>
<ET>There were 3 errors:
<Error>
<ErrorId>AllConditionsTrue</ErrorId>
<MetaData>
<Entry>
<Key>Balance Due</Key>
<Value>1500.99</Value>
</Entry>
</MetaData>
</Error>
<Error>
<ErrorId>Opposite</ErrorId>
<MetaData>
<Entry>
<Key>Node</Key>
</Entry>
</MetaData>
</Error>
<Error>
<ErrorId>minInclusive</ErrorId>
<MetaData>
<Entry>
<Key>Description</Key>
<Value>Wages Amount</Value>
</Entry>
</MetaData>
</Error>
: 0.027ms</ET>
<ET>convert: 319.414ms</ET>
<FORM id="123"/>
<DATA size="11920"/>
<ERROR code="0"/>
如何仅捕获错误标记处和内部的文本(<Error> some text </Error>)。所以我的新 String 或 StringBuffer 对象包含:
<Error>
<ErrorId>AllConditionsTrue</ErrorId>
<MetaData>
<Entry>
<Key>Balance Due</Key>
<Value>1500.99</Value>
</Entry>
</MetaData>
</Error>
<Error>
<ErrorId>Opposite</ErrorId>
<MetaData>
<Entry>
<Key>Node</Key>
</Entry>
</MetaData>
</Error>
<Error>
<ErrorId>minInclusive</ErrorId>
<MetaData>
<Entry>
<Key>Description</Key>
<Value>Wages Amount</Value>
</Entry>
</MetaData>
</Error>
如何使用 Java 实现我的目标?
编辑
尝试你们的两个解决方案:
Pattern p = Pattern.compile("<Error>.*?<\\/Error>", Pattern.DOTALL);
Matcher m = p.matcher(buf.toString());
String errorText = "";
while (m.find()) {
errorText = m.group(1);
}
我似乎只得到 3 个错误标签元素,而不是全部 3 个。
例子:
<Error>
<ErrorId>minInclusive</ErrorId>
<MetaData>
<Entry>
<Key>Description</Key>
<Value>Wages Amount</Value>
</Entry>
</MetaData>
</Error>
【问题讨论】:
-
请不要使用StringBuffer,因为它在十多年前就被StringBuilder取代了。
标签: java regex xml string stringbuffer