AGMedlem sedan mars 20001 229 inlägg
Har även ett till XML-problem jag skulle vilja ha hjälp med, även detta skall sättas in i databas.
Filen är uppbyggd enlig följande princip:
- <RateList>
- <Rate TimeOfRate="12noon" TypeOfRate="spot" Id="1">
<Date>2004-02-06</Date>
<Country UnitName="Dollar">Australia</Country>
<Value InUsd="true">0.7679</Value>
</Rate>
- <Rate TimeOfRate="12noon" TypeOfRate="spot" Id="2">
<Date>2004-02-06</Date>
<Country UnitName="Dollar">Australia</Country>
<Value InUsd="true">0.7679</Value>
</Rate>
osv...
</RateList>
De värden jag vill plocka ut är Date, UnitName, Country, InUSD och Value.
Vore ytterst tacksam för denna hjälp.
tack
Andreas
Aleph_OneMedlem sedan juni 2003370 inlägg
Så här kan du göra
import org.apache.crimson.jaxp.DocumentBuilderFactoryImpl;
import org.apache.xpath.XPathAPI;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class ParseXML3
{
public ParseXML3() throws Exception
{
//Få in xmlsträngen som ett dokument på ett eller annat sätt
Document mDocument = DocumentBuilderFactoryImpl.newInstance().newDocumentBuilder().parse("conf/ratelist.xml");
NodeList list = XPathAPI.selectNodeList(mDocument, "/RateList/Rate");
String date, unitName, country, inUsd, value;
for (int i = 0; i < list.getLength(); i++)
{
Node node = list.item(i);
date = XPathAPI.selectSingleNode(node, "Date").getFirstChild().toString();
unitName = XPathAPI.selectSingleNode(node, "Country/@UnitName").getNodeValue();
country = XPathAPI.selectSingleNode(node, "Country").getFirstChild().toString();
inUsd = XPathAPI.selectSingleNode(node, "Value/@InUsd").getNodeValue();
value = XPathAPI.selectSingleNode(node, "Value").getFirstChild().toString();
System.out.println("date " + date);
System.out.println("unitname " + unitName);
System.out.println("country " + country);
System.out.println("inusd " + inUsd);
System.out.println("value " + value);
}
}
public static void main(String[] args) throws Exception
{
new ParseXML3();
}
}
Här kan du läsa mer om XPath om hur det fungerar:
http://java.sun.com/webservices/docs/1.3/tutorial/doc/index.html
AGMedlem sedan mars 20001 229 inlägg
Jag får tacka så mycket för hjälpen, dock har jag ett problem.
Den skriver ut "value [#text: 1920]" och country [#text: Venezuela]. Hur gör jag så att den skriver ut country som en vanlig string? Dock vill jag få ut value som en double.
tack
Andreas
Aleph_OneMedlem sedan juni 2003370 inlägg
Byt ut toString() mot getNodeValue() så ska det visa rätt.
double d = Double.parseDouble(value);
Tips är att alltid ha API:t framme när du sitter och kodar.. Går snabbt och enkelt att kolla upp saker då. :)
http://java.sun.com/j2se/1.4.2/docs/api/