PDA

View Full Version : modifica xml con jdom


boysna
25-07-2006, 19:10
Ragazzi devo modificare tramite jdom un file xml così composto:

<root>
<prodotti>
<id>00005</id>
<taglia>41</taglia>
<colore>giallo</colore>
<marca>Puma</marca>
<disponibilita>0</disponibilita>
<scorta_minima>1</scorta_minima>
<prezzo_vendita>75</prezzo_vendita>
<prezzo_acquisto>40</prezzo_acquisto>
</prodotti>
<prodotti>
<id>00004</id>
<taglia>40</taglia>
<colore>giallo</colore>
<marca>Adidas</marca>
<scorta_minima>1</scorta_minima>
<prezzo_vendita>77</prezzo_vendita>
<prezzo_acquisto>45</prezzo_acquisto>
<disponibilita>3</disponibilita>
</prodotti>
<prodotti>
<id>00002</id>
<taglia>44</taglia>
<colore>nero</colore>
<marca>Nike</marca>
<scorta_minima>6</scorta_minima>
<prezzo_vendita>100</prezzo_vendita>
<prezzo_acquisto>57</prezzo_acquisto>
<disponibilita>3</disponibilita>
</prodotti>
<prodotti>
<id>00003</id>
<taglia>48</taglia>
<colore>rosso</colore>
<marca>Puma</marca>
<scorta_minima>10</scorta_minima>
<prezzo_vendita>60</prezzo_vendita>
<prezzo_acquisto>20</prezzo_acquisto>
<disponibilita>3</disponibilita>
</prodotti>
<prodotti>
<id>00001</id>
<taglia>43</taglia>
<colore>rosso</colore>
<marca>Nike</marca>
<scorta_minima>1</scorta_minima>
<prezzo_vendita>60</prezzo_vendita>
<prezzo_acquisto>50</prezzo_acquisto>
<disponibilita>3</disponibilita>
</prodotti>
</root>


Quello che devo modificare è la disponibilità dei prodotti.
Ho una HashTable i cui elementi sono String[] e devo aggioranare nel file xml solo i tag prodotti che hanno come id una chiave presente nell''HashTable.
Per fre cio mi procuro una List dei tag <prodotti>, la scorro e vedo per ogni elemento se il loro id è presente nell'hashtable, se è presente sostituisco nel file xml la sottrazione tra la disponibilità del prodotto e il quarto campo della String[] identificato dall'id.


Questo è il metodo che ho creato. Purtroppo la disponibilità è agiornata in maniera sballata. Ho notato che se nell'Hashtable metto solo l'ultimo Element prodotti, questo viene aggioranto bene. Altrimenti no.


public void aggiornaMagazzino(PackProdotti carrello){

Element root = document.getRootElement();
Hashtable prodottiCarrello = carrello.prodotti;
List prodotti = root.getChildren();

for(int i=0; i<prodotti.size(); i++){

Element prodotto = ((Element)prodotti.get(i));

if(prodottiCarrello.containsKey(prodotto.getChildText("id"))){


Element dispElem = prodotto.getChild("disponibilita");
int disp = Integer.parseInt(dispElem.getText());
int quantitaAcquistata = Integer.parseInt(((String[])prodottiCarrello.get(prodotto.getChildText("id")))[4]);

prodotto.removeContent(dispElem);
root.removeContent(prodotto);

dispElem.setText(Integer.toString(disp - quantitaAcquistata));
prodotto.addContent(dispElem);

root.addContent(prodotto);

document.setRootElement(root);

try {
XMLOutputter outputter = new XMLOutputter();
FileOutputStream output = new FileOutputStream(completePath);
outputter.output(document, output);
}

catch (FileNotFoundException e) {
e.printStackTrace();
}

catch (IOException e) {
e.printStackTrace();
}


}