Już Ci pisałem przy okazji innego tematu - użyj jednego z dostepnych parserów. Wydobywanie z xml za pomocą regexp-a wydaje się być "nieco" dziwne. Domyślam się, że użycie jakiegoś parsera może być na pierwszy raz kłopotliwe(po prostu trzeba to zrozumieć) dlatego pomogę Ci przykładowym kodem z użyciem parsera SAX (
Kod: Zaznacz cały
http://www.saxproject.org/apidoc/overview-summary.html
).
Przykładowe użycie parsera:
Kod: Zaznacz cały
public class CurrencyParser {
public static void main(String[] args) {
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
ArrayList<Currency> currencies = new ArrayList<Currency>();
Currency currency;
boolean bSell = false;
boolean bBuy = false;
boolean bCode = false;
public void endDocument() throws SAXException {
System.out.println("Pobrane waluty : " + currencies);
}
public void startElement(String uri, String localName,
String qName, Attributes attributes)
throws SAXException {
if (qName.equals("waluta")) {
currency = new Currency();
}
if (qName.equals("kod_waluty")) {
bCode = true;
}
if (qName.equals("kurs_kupna")) {
bBuy = true;
}
if (qName.equals("kurs_sprzedazy")) {
bSell = true;
}
}
public void endElement(String uri, String localName,
String qName) throws SAXException {
if (qName.equals("waluta")) {
currencies.add(currency);
}
}
public void characters(char ch[], int start, int length)
throws SAXException {
if (bCode) {
currency.setCode(new String(ch, start, length));
bCode = false;
}
else if (bBuy) {
currency.setBuy(Double.parseDouble(new String(ch,
start, length)));
bBuy = false;
}
else if (bSell) {
currency.setSell(Double.parseDouble(new String(ch,
start, length)));
bSell = false;
}
}
};
saxParser.parse("c:\currencies.xml", handler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Zwykły bean do przechowywania danych o walucie:
Kod: Zaznacz cały
public class Currency {
String code;
double sell;
double buy;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public double getSell() {
return sell;
}
public void setSell(double sell) {
this.sell = sell;
}
public double getBuy() {
return buy;
}
public void setBuy(double buy) {
this.buy = buy;
}
@Override
public String toString() {
return code + " " + sell + " " + buy;
}
}
Przykładowy plik xml currencies.xml, oczywiście możesz go dowolnie dopasować(potrzebne zmiany w programie). Wartości walut przypadkowe.
Kod: Zaznacz cały
<waluty>
<waluta>
<kod_waluty>USD</kod_waluty>
<kurs_kupna>3.1698</kurs_kupna>
<kurs_sprzedazy>3.30</kurs_sprzedazy>
</waluta>
<waluta>
<kod_waluty>PL</kod_waluty>
<kurs_kupna>2.12</kurs_kupna>
<kurs_sprzedazy>2.30</kurs_sprzedazy>
</waluta>
<waluta>
<kod_waluty>CHF</kod_waluty>
<kurs_kupna>1.1698</kurs_kupna>
<kurs_sprzedazy>1.30</kurs_sprzedazy>
</waluta>
</waluty>