我需要在Android活动中解析以下XML结构。我有它的字符串格式:
<Cube>
<Cube time="2012-09-20">
<Cube currency='USD' rate='1.2954'/>
<Cube currency='JPY' rate='101.21'/>
<!-- More cube tags here -->
</Cube>
</Cube>
出于这个原因,我希望获得一系列货币名称(美元,日元等)及其各自的汇率。 (可选)在XML文档中仅以上面指定的格式出现一次的日期。请注意空Cube标签。可能还有其他类似的奇怪事件。我只需要获得具有货币和汇率设置的Cube标签。
最好使用一些XML解析库而不是正则表达式,但如果它转向那个我也准备好使用它。
编辑: 这是我到目前为止所提出的。问题是将匹配的元素插入到数组中,我不知道该怎么做。
Pattern p = Pattern.compile("<Cube\\scurrency='(.*)'\\srate='(.*)'/>");
Matcher matcher = p.matcher(currency_source);
while (matcher.find()) {
Log.d("mine", matcher.group(1));
}
答案 0 :(得分:2)
这是一个应该获取所需数据的自定义处理程序:
public class MyHandler extends DefaultHandler {
private String time;
// I would use a simple data holder object which holds a pair
// name-value(or a HashMap)
private ArrayList<String> currencyName = new ArrayList<String>();
private ArrayList<String> currencyValue = new ArrayList<String>();
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if (localName.equals("Cube")) { // it's a Cube!!!
// get the time
if (attributes.getIndex("", "time") != -1) {
// this Cube has the time!!!
time = attributes.getValue(attributes.getIndex("", "time"));
} else if (attributes.getIndex("", "currency") != -1
&& attributes.getIndex("", "rate") != -1) {
// this Cube has both the desired values so get them!!!
// but first see if both values are set
String name = attributes.getValue(attributes.getIndex("",
"currency"));
String value = attributes.getValue(attributes.getIndex("",
"rate"));
if (name != null && value != null) {
currencyName.add(name);
currencyName.add(value);
}
} else {
// this Cube doesn't have the time or both the desired values.
}
}
}
}
然后您可以在http://developer.android.com/reference/android/util/Xml.html或其中一个教程中使用它来解析您的xml String
。