以有效的方式将XML解析为JAVA POJO

如何以高效的方式解析和创建xml以下的java pojo? 请建议任何有效的解析器。

XML格式是

  

我已经使用了这个链接,但它的性能很慢,并且有问题没有效果pojo。

我想解析器以有效的方式为我提供直接的java pojo。

您可以使用JAXB将XML转换为Java POJO。 但在最终确定解决方案之前,请检查此站点以进行性能比较。

对于那些寻找JAXB代码将xml转换为java对象的人:

 //Convert xml to String first Element partyLoaderRequest; // your xml data String xmlString = new XMLOutputter().outputString(partyLoaderRequest); InputStream is = new ByteArrayInputStream(xmlString.getBytes()); DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document document = docBuilder.parse(is); org.w3c.dom.Element varElement = document.getDocumentElement(); JAXBContext context = JAXBContext.newInstance(Person.class); Unmarshaller unmarshaller = context.createUnmarshaller(); JAXBElement loader = unmarshaller.unmarshal(varElement, Person.class); Person inputFromXml = loader.getValue(); 

而Person有适当的XML注释:

 @XmlRootElement(name="Person") public class CimbWlAdminUserAmendInput { @XmlElement(name="companyName",required=true,nillable=false) private String companyName; ... //setters getters @XmlTransient public String getCompanyName() { return companyName; } public void setCompanyName(String companyName) { this.companyName = companyName; } } 

可以通过JacksonXmlModule处理序列化和反序列化。

 // Item.class - use lombok or create g/setters @JsonPropertyOrder({"name", "description", "note"}) public class Item { private String name; private String description; private String note; } // Test.class package hello.service; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; import hello.entity.Item; import org.junit.Before; import org.junit.Test; import java.util.ArrayList; import java.util.List; import static org.junit.Assert.*; public class NameServiceImplTest { ObjectMapper objectMapper; @Before public void setup() { JacksonXmlModule xmlModule = new JacksonXmlModule(); xmlModule.setDefaultUseWrapper(false); this.objectMapper = new XmlMapper(xmlModule); this.objectMapper.enable(SerializationFeature.INDENT_OUTPUT); } @Test public void serializeTest() { // Wrapper @JacksonXmlRootElement(localName = "names") class Names { public List item = new ArrayList<>(); } Item item = new Item(); item.setName("Vladimir"); item.setDescription("Desc"); item.setNote("Note"); Item item2 = new Item(); item2.setName("Iva"); item2.setDescription("Desc2"); item2.setNote("Note2"); Names names = new Names(); names.item.add(item); names.item.add(item2); try { String xml = objectMapper.writeValueAsString(names); assertNotNull(xml); System.out.println(xml); } catch (Exception e) { // IOException System.out.println(e.getMessage()); fail(); } } @Test public void deserializeTest() { String xml = "" + "namedescnote" + "namedescnote" + ""; try { List names = objectMapper.readValue(xml, new TypeReference>() {}); names.forEach(item -> { assertEquals("name", item.getName()); assertEquals("desc", item.getDescription()); assertEquals("note", item.getNote()); } ); } catch (Exception e) { // IOException } } }