JAXB (Java Architecture для привязки XML) предоставляет функциональные возможности для чтения или записи XML из файла. Поскольку XML везде используется в Java, это полезно. Здесь я предполагаю, что у вас есть некоторые знания по XML.
Что вы должны иметь
1. JAXB
Загрузите его и добавьте папку bin в ваш classpath. Я использовал Eclipse в качестве IDE.
Давайте начнем…
1. Создайте проект в Eclipse под названием JAXB.
2. Создайте каталог библиотеки и скопируйте туда все файлы JAXB. (давайте назовем его » lib «)
3. Добавьте lib в путь сборки.
4. У вас должен быть файл определения схемы XML, поэтому давайте создадим его. Давайте назовем это GSCProfile.xsd
5. Скопируйте следующий контент в файл схемы.
GSCProfile.xsd
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/GSCProfile" xmlns:tns="http://www.example.org/GSCProfile" elementFormDefault="qualified">
<complexType name="GSC">
<sequence>
<element name="Name" type="string"></element>
<element name="Rating" type="int"></element>
</sequence>
</complexType>
<complexType name="Profile">
<sequence>
<element name="ProfileName" type="string"></element>
<element name="GSCElements" type="tns:GSC" maxOccurs="14" minOccurs="14"></element>
</sequence>
</complexType>
<complexType name="GSCProfiles">
<sequence>
<element name="Profile" type="tns:Profile" maxOccurs="unbounded" minOccurs="1"></element>
</sequence>
</complexType>
</schema>
Здесь у нас есть три сложных типа, называемых,
1.GSCProfiles
2.Profile
3.GSC
GSCProfiles является корнем всех. вот как идут отношения,
GSCProfiles — <Профиль — <GSC
После того как вы добавили папку bin в classpath, перейдите в папку src вашего проекта из командной строки и
введите следующую команду:
xjc -d binding -p com.jaxb.gsc GSCProfiles.xsd
Это создаст несколько классов в вышеупомянутом пакете ( com.jaxb.gsc ) по одному классу для каждого сложного типа и фабрики объектов и класса информации о пакете.
Создайте другой класс с именем JAXBTest в другом пакете, назовем его com.jaxb.test
JAXBTest.java
Создайте эту переменную на уровне класса. и переменная для хранения имени файла XML.
private static Map<String, Map<String, String>> gscProfileMap = new HashMap<String, Map<String, String>>();
/**
* Output xml file name.
*/
private static File xmlFile = new File("xml/GSCProfile.xml");
1. Создайте метод с именем saveGSCProfiles и добавьте туда следующие фрагменты кода. этот метод сохранит контент для него.
public static void saveGSCProfiles() {
try {
Map<String, String> gscValueMap = new HashMap<String, String>();
// Adding GSC Elements
gscValueMap.put("Data Communications", "0");
gscValueMap.put("Distributed Data Processing", "0");
gscValueMap.put("Performance", "0");
gscValueMap.put("Heavily Used Configuration", "0");
gscValueMap.put("Transaction Rate", "0");
gscValueMap.put("Online Data Entry", "0");
gscValueMap.put("End User Efficiency", "0");
gscValueMap.put("Online Update", "0");
gscValueMap.put("Complex Processing", "0");
gscValueMap.put("Reusability", "0");
gscValueMap.put("Installation Ease", "0");
gscValueMap.put("Operational Ease", "0");
gscValueMap.put("Multiple Sites", "0");
gscValueMap.put("Facilitate Change", "0");
gscProfileMap.put("ProfileName", gscValueMap);
Set<String> pofileNames = gscProfileMap.keySet();
ObjectFactory factory = new ObjectFactory();
GSCProfiles gscProfiles = factory.createGSCProfiles();
for (String profileKey : pofileNames) {
Profile profile = factory.createProfile();
// Setting profile name.
profile.setProfileName(profileKey);
gscValueMap = gscProfileMap.get(profileKey);
Set<String> gscSet = gscValueMap.keySet();
for (String gscKey : gscSet) {
GSC gsc = factory.createGSC();
gsc.setName(gscKey);
gsc.setRating(Integer.parseInt(gscValueMap.get(gscKey)));
profile.getGSCElements().add(gsc);
}
gscProfiles.getProfile().add(profile);
}
JAXBContext jaxbContext = JAXBContext.newInstance("com.jaxb.gsc");
// Creating marshaller.
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
FileOutputStream outputStream = new FileOutputStream(xmlFile);
// Marshalling object in to the XML file.
marshaller.marshal(gscProfiles, outputStream);
} catch (JAXBException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
2. Создайте другой метод для чтения из файла XML. давайте назовем это как loadGSCProfiles
public static void loadGSCProfiles() {
try {
JAXBContext jaxbContext = JAXBContext.newInstance("com.jaxb.gsc");
// Create unmarshaller.
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
GSCProfiles gscProfiles = (GSCProfiles) unmarshaller.unmarshal(xmlFile);
// Retrieving list of profiles.
List<Profile> profile = gscProfiles.getProfile();
for (Profile profile2 : profile) {
Map<String, String> gscValueMap = new HashMap<String, String>();
List<GSC> gsc = profile2.getGSCElements();
for (GSC gsc2 : gsc) {
gscValueMap.put(gsc2.getName(), gsc2.getRating() + "");
}
gscProfileMap.put(profile2.getProfileName(), gscValueMap);
}
} catch (JAXBException e) {
e.printStackTrace();
}
Создайте каталог внутри вашего проекта Eclipse, назовите его xml и создайте xml-файл с именем GSCProfile.xml
Наконец, ваша структура каталогов проекта Eclipse должна выглядеть следующим образом