-3

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

1 回答 1

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

于 2012-09-21T14:12:21.247 回答