05. februar 2008 - 12:52
Der er
9 kommentarer og 1 løsning
XPATH/XQUIRY Problem
Hej Eksperter, Hvis jeg nu har <dims> <antal>100</title> <vaerdi>43</vaerdi> </dims> <dims> <antal>110</title> <vaerdi>123</vaerdi> </dims> <dims> <antal>105</title> <vaerdi>123</vaerdi> </dims> <dims> <antal>187</title> <vaerdi>55</vaerdi> </dims> <dims> <antal>187</title> <vaerdi>13</vaerdi> </dims> <dims> <antal>187</title> <vaerdi>12</vaerdi> </dims> <dims> <antal>187</title> <vaerdi>6</vaerdi> </dims> <dims> <antal>187</title> <vaerdi>1</vaerdi> </dims> <dims> <antal>187</title> <vaerdi>2</vaerdi> </dims> Som er resultatet på Document trae = factory.newDocumentBuilder().parse(URL); elementer = XPathAPI.selectNodeList(trae, "//bla/dims"); Hvordan får jeg så de fire hvor antal * vaerdi giver det højeste
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
05. februar 2008 - 14:30
#1
ved godt det er lidt hardcore. Hvad nu hvis jeg bare vil have dem med de fire højeste antal
05. februar 2008 - 18:38
#2
Jeg er vel i virkeligheden nød til at løbe min nodelist igennem, smide resultatet i et array og så finde indexs på de 4 højeste værdier
06. februar 2008 - 03:20
#3
Der findes hurtigere måder at finde de 4 største end sortering, men hvis der ikke er alt for mange elementer så går det - og det er meget nemmere: package february; import java.util.ArrayList; import java.util.Collections; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.xpath.XPathAPI; import org.w3c.dom.Document; import org.w3c.dom.NodeList; public class XmlList { public static void main(String[] args) throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Document doc = dbf.newDocumentBuilder().parse("C:/dimser.xml"); NodeList dimsnodes = XPathAPI.selectNodeList(doc, "//bla/dims"); ArrayList<Dims> dimslist = new ArrayList<Dims>(); for(int i = 0; i < dimsnodes.getLength(); i++) { String antal = XPathAPI.selectSingleNode(dimsnodes.item(i), "antal/text()").getNodeValue(); String vaerdi = XPathAPI.selectSingleNode(dimsnodes.item(i), "vaerdi/text()").getNodeValue(); dimslist.add(new Dims(Integer.parseInt(antal), Integer.parseInt(vaerdi))); } Collections.sort(dimslist); for(int i = 0; i < 4; i++) { System.out.println(dimslist.get(i)); } } } class Dims implements Comparable<Dims> { private int antal; private int vaerdi; public Dims() { this(0, 0); } public Dims(int antal, int vaerdi) { super(); this.antal = antal; this.vaerdi = vaerdi; } public int getAntal() { return antal; } public void setAntal(int antal) { this.antal = antal; } public int getVaerdi() { return vaerdi; } public void setVaerdi(int vaerdi) { this.vaerdi = vaerdi; } public String toString() { return "[" + antal + "*" + vaerdi + "=" + antal*vaerdi + "]"; } public int compareTo(Dims o) { return o.antal * o.vaerdi - antal * vaerdi; } }
06. februar 2008 - 12:14
#4
jeg kan ikke bruge ArrayList<Dims> dimslist = new ArrayList<Dims>(); er begrænset af 1.4.2
06. februar 2008 - 15:07
#5
Saa bruger du jo bare: ArrayList dimslist = new ArrayList(); og caster naar du kalder get.
06. februar 2008 - 15:08
#6
Under alle omstaendigheder er det jo bare et eksempel. Du maa saa finde ud af hvordan det skal loeses i din kontekst.
06. februar 2008 - 15:24
#7
jepper. Det hele virker. Tak for hjælpen
06. februar 2008 - 22:47
#8
lægger du et svar :-)
06. februar 2008 - 22:56
#9
kommer her
06. februar 2008 - 23:03
#10
igen mange tak for hjælpen :-)
Kurser inden for grundlæggende programmering