Pobieranie wartości atrybutów z pliku XML

0

Cześć.
Mam problem, z którym męczę się już dłuższy czas.
Mam plik o nazwie "test.xml":

<?xml version="1.0" encoding="UTF-8"?>
<testowa miastoTest="jakiś napis">
	<pozycja miasto2="Bielsko-Biała" kod="43-300"/>
</testowa>

Chcę odczytać z niego zawartość "miasto2" oraz "kod". Szukając rozwiązania w internecie, stworzyłem metodą prób i błędów trzy klasy:

Pierwsza: która ma zainicjować wczytywanie

package XMLListLoader;

import java.io.File;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;


public class cXMLProductRootLoader {

	public cXMLProductRootLoader() throws JAXBException {
		File file = new File("test.xml");
		JAXBContext jaxbContext = JAXBContext.newInstance(testowa.class);
		Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
		
		testowa postCode = (testowa) jaxbUnmarshaller.unmarshal(file);
	
		System.out.println("Test: "+postCode.getTestMiasto()+" | Miasto: " + postCode.getPozycja().getMiasto() + " | Kod: " + postCode.getPozycja().getKod());
	}
	
}

Druga: która ma odczytać główną gałąź 'testowa'

package XMLListLoader;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class testowa {

	@XmlAttribute(name="miastoTest")
	private String miastoTest;
	
	
	pozycja cPozycja = new pozycja();
		
	public pozycja getPozycja() {
		return cPozycja;
	}	
	
	public String getTestMiasto() {
		return miastoTest;
	}
}

No i trzecia, która miała odczytać pożądane wartości:

package XMLListLoader;

import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class pozycja {
	
	@XmlAttribute
	private String miasto2;
	@XmlAttribute
	private String kod;

	public pozycja() {}
	
	public String getMiasto() { return miasto2; }
	public String getKod() { return kod; }	

}

Po kompilacji kodu dostaję taki rezultat:

Test: jakiś napis | Miasto: null | Kod: null

Niestety nie mam pojęcia gdzie jest błąd. Czy ktoś może mi z tym pomóc?

1

Zmień naze klasy pozycja na d Pozycja (wielka litera).
i popraw klasę testowa

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class testowa {

    @XmlAttribute(name="miastoTest")
    private String miastoTest;

    Pozycja pozycja; //zmiana nazwy pola

    public Pozycja getPozycja() {
        return pozycja; //tu tez
    }

    public String getTestMiasto() {
        return miastoTest;
    }
}

Błąd był w tym, że pole od pozycji musi się nazywać 'pozycja' (żeby XML się tam "wparsował"). Co było z kolei kłopotem jeśli klasa już się tak samo nazywała.

Klasy w Javie warto pisać wielką literą. testowa i ta cXMLProdu... też potem popraw.

0

No działa i powiem szczerze, że w życiu bym nie wpadł, że tu jest problem.
Dziękuję bardzo.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.