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
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
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