【翻译】Hello World with Java Architecture for XML Binding - JAXB
原文地址: http://kushanxp.blogspot.com/2011/03/hello-world-with-java-architecture-for.html
What is JAXB?
JAXB (Java Architecture for XML Binding) facilitates you to read or write to a XML file. since XML involves with Java everywhere, It will be very useful when working with Java. Here I'm assuming you are having some knowledge on XML.
What you should have
1. JAXB
Download it and add its bin folder to your classpath.
I have used eclipse as the IDE.
Let's start...
1. Create a project in eclipse called JAXB.
2. Create the library directory and copy all the JAXB jars there. (lets call its "lib")
3. Add lib to the build path.
4. You should have a XML schema definition file, so let's create one. Let's name it as GSCProfile.xsd
5. Copy following content to the schema file.
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>
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");
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(); } }
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(); }
public static void main(String[] args) { loadGSCProfiles(); saveGSCProfiles(); }