Witam.
Jestem w trakcie pisania aplikacji, która będzie pobierała(wraz z uruchomieniem) aktualne kursy walut z pliku .xml, znajdującego się na stronie NBP, a następnie będzie ich używała do obliczeń wymiany walut. Jak do tej pory udaje mi się czytać całą zawartość pliku, pobierając strumień z URL. Jednak nie potrafię, zrealizować tego, aby w tym xml'u wyszukało mi wartość (kurs) dla danej-potrzebnej waluty. Przeczytałem już trochę w sieci i w żaden sposób, nie wiem jak tego dokonać [glowa] . Nigdy tego wcześniej nie robiłem, dlatego liczę na wyrozumiałość :). A o to mój dotychczasowy kod:
Najpierw fragment pliku xml, który należy przeszukać:
...
<pozycja>
<nazwa_waluty>dolar amerykański</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>USD</kod_waluty>
<kurs_sredni>2,0875</kurs_sredni>
</pozycja>
- <pozycja>
<nazwa_waluty>dolar australijski</nazwa_waluty>
<przelicznik>1</przelicznik>
<kod_waluty>AUD</kod_waluty>
<kurs_sredni>1,9100</kurs_sredni>
</pozycja>
...
A o to klasa z Handlerem:
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;
public class Test_Class1 extends DefaultHandler {
public Test_Class1(){
super();
}
public void startDocument (){
System.out.println("Start document");
}
public void endDocument (){
System.out.println("End document");
}
public void startElement (String uri, String name, String qName, Attributes atts){
if ("".equals (uri))
System.out.println("Start element: " + qName);
else
System.out.println("Start element: {" + uri + "}" + name);
}
public void endElement (String uri, String name, String qName){
if ("".equals (uri))
System.out.println("End element: " + qName);
else
System.out.println("End element: {" + uri + "}" + name);
}
public void characters (char ch[], int start, int length){
System.out.print("Characters: \"");
for (int i = start; i < start + length; i++) {
switch (ch[i]) {
case '\\':
System.out.print("\\\\");
break;
case '"':
System.out.print("\\\"");
break;
case '\n':
System.out.print("\\n");
break;
case '\r':
System.out.print("\\r");
break;
case '\t':
System.out.print("\\t");
break;
default:
System.out.print(ch[i]);
break;
}
}
System.out.print("\"\n");
}
public static void main(String[] args) throws Exception{
XMLReader myReader = XMLReaderFactory.createXMLReader();
Test_Class1 handler = new Test_Class1();
myReader.setContentHandler(handler);
myReader.setErrorHandler(handler);
myReader.parse(new InputSource(ParsingXML.inputStream()));
}
}
I klasa łączące się z URL:
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import org.xml.sax.helpers.DefaultHandler;
public class ParsingXML extends DefaultHandler{
public static InputStream inputStream(){
try{
URL nbp = new URL("http://www.nbp.pl/Kursy/xml/a152z080805.xml");
URLConnection urlConn = nbp.openConnection();
return urlConn.getInputStream();
}catch(MalformedURLException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
return null;
}
}