Avatar billede mik28 Seniormester
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
Avatar billede mik28 Seniormester
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
Avatar billede mik28 Seniormester
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
Avatar billede arne_v Ekspert
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;
    }
}
Avatar billede mik28 Seniormester
06. februar 2008 - 12:14 #4
jeg kan ikke bruge
ArrayList<Dims> dimslist = new ArrayList<Dims>();

er begrænset af 1.4.2
Avatar billede arne_v Ekspert
06. februar 2008 - 15:07 #5
Saa bruger du jo bare:

ArrayList dimslist = new ArrayList();

og caster naar du kalder get.
Avatar billede arne_v Ekspert
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.
Avatar billede mik28 Seniormester
06. februar 2008 - 15:24 #7
jepper. Det hele virker. Tak for hjælpen
Avatar billede mik28 Seniormester
06. februar 2008 - 22:47 #8
lægger du et svar :-)
Avatar billede arne_v Ekspert
06. februar 2008 - 22:56 #9
kommer her
Avatar billede mik28 Seniormester
06. februar 2008 - 23:03 #10
igen mange tak for hjælpen :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester