简单的Android XML解析任务

时间:2012-09-21 12:15:43

标签: android xml regex

我需要在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));
}

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