webForumDet fria alternativet

Sekundärt xml-problem

3 svar · 309 visningar · startad av AG

AGMedlem sedan mars 20001 229 inlägg
#1

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

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

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

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/

Genererad på 395 ms · cache AV · v20260730165559-full.f96bc7eb