如何创建一个简单的jaxb Java类来表示以下xml
<rootelem>
<myelem name="abc" myatt="true"/>
<myelem name="def">
<Key value="newvalue"/>
</myelem>
<myelem name="xyz">
<Key value="42"/>
</myelem>
</rootelem>
可以有多个myelem
,每个myelem
可以包含多个key
我不想使用xsd
答案 0 :(得分:4)
这是一个基本的例子:
import java.io.FileReader;
import java.util.List;
import javax.xml.bind.JAXB;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="rootelem")
class RootElem {
List<MyElem> myelem;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="myelem")
class MyElem {
@XmlAttribute
String name;
@XmlAttribute
Boolean myatt;
@XmlElement(name="Key")
List<Key> keys;
}
@XmlAccessorType(XmlAccessType.FIELD)
class Key {
@XmlAttribute
String value;
}
public class Test1 {
public static void main(String[] args) throws Exception {
RootElem r = JAXB.unmarshal(new FileReader("test.xml"), RootElem.class);
System.out.println(r);
JAXB.marshal(r, System.out);
}
}
答案 1 :(得分:1)
这是我们用来使用类而不是XSD使用JAXB转换为XML的类的副本。 (我们还使用JAXB生成XSD)。
编辑:我刚刚重新阅读了这个问题。如果您正在询问如何从该XML生成Java源代码,那么您将不得不自己解决这个问题,或者使用XSD并使用JAXB将其转换为类。如果您已经拥有该类并且想要将XML转换为Java对象,那么下面的代码将适合您。package com.mycompany.types;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlTransient;
/**
* Utility class to make it convenient to marshal and unmarshal the classes
* generated by JAXB.
*/
@XmlTransient
public final class Utility {
//
// Static initialization
//
static {
try {
JAXB_CONTEXT = JAXBContext.newInstance(TestClass.class);
// The following fails with a javax.xml.bind.JAXBException.
// class mycompany.types.TestClass nor any of its super class is known
// to this context.
// JAXB_CONTEXT =
// JAXBContext.newInstance("com.mycompany.types",
// Utility.class.getClassLoader());
}
catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
//
// Constructors
//
//
// Hidden constructor that prevents an object from being created.
//
private Utility() {
// Do nothing.
}
//
// Additional methods
//
/**
* Unmarshals an XML string to a TestClass object.
*
* @param xml the XML string to parse
* @return the resulting TestClass
* @throws JAXBException if there are XML errors
*/
public static TestClass parseTestClass(String xml) throws JAXBException {
Unmarshaller unmarshaller = JAXB_CONTEXT.createUnmarshaller();
return (TestClass)unmarshaller.unmarshal(new StringReader(xml));
}
/**
* Marshals a TestClass object to an XML string.
*
* @param testClass
* @return the resulting XML string
* @throws JAXBException if there are XML errors
*/
public static String printTestClass(TestClass testClass) throws JAXBException {
Marshaller marshaller = JAXB_CONTEXT.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter writer = new StringWriter();
marshaller.marshal(testClass, writer);
return writer.toString();
}
//
// Attributes
//
private static final JAXBContext JAXB_CONTEXT;
}