-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>

これから、通貨名 (USD、JPY など) とそれぞれのレートの配列を取得したいと考えています。オプションで、上記で指定された形式で XML ドキュメントに 1 回だけ表示される日付。空の 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または数千のチュートリアルの 1 つに沿って使用して、 xml を解析できますString

于 2012-09-21T14:12:21.247 に答える