首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >高效地将XML解析为JAVA POJO

高效地将XML解析为JAVA POJO
EN

Stack Overflow用户
提问于 2013-02-09 22:52:36
回答 4查看 56.8K关注 0票数 13

如何高效地解析和创建下面的xml的java pojo?敬请推荐任何有效的解析器。

XML格式为

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<CCMainRootTag ID="12">
  <Header TableName="TableName"    TableVersion="12" TableID="12" CreatedDate="2013-02-09T15:35:33" CreatedByUserName="ABC" CreatedBySystem="ABC" />
  <ClassPrimary ID="12" Code="Y" DescriptionDK="DK language " DescriptionUK="" DefDK="" DefUK="" IFDGUID="">
    <ObjectClass ID="12" Code="YA" DescriptionDK="DK Language" DescriptionUK="" DefDK=""     DefUK="" IFDGUID="">
      <Synonym>
        <Concept Description="Description" Language="DK" />
        <Concept Description="" Language="UK" />
        <Concept Description="Description" Language="DK" />
        <Concept Description="" Language="UK" />
        <Concept Description="Description" Language="DK" />
        <Concept Description="" Language="UK" />
        <Concept Description="Description" Language="DK" />
        <Concept Description="" Language="UK" />
      </Synonym>
    </ObjectClass>
    <ObjectClass ID="12" Code="YB" DescriptionDK="DK Language" DescriptionUK="" DefDK="" DefUK="" IFDGUID=""> </ObjectClass>
    <ObjectClass ID="12" Code="YC" DescriptionDK="DK Language" DescriptionUK="" DefDK="" DefUK="" IFDGUID=""> </ObjectClass>
    <ObjectClass ID="12" Code="YD" DescriptionDK="DK language" DescriptionUK="" DefDK="" DefUK="" IFDGUID=""> </ObjectClass>
  </ClassPrimary>
</CCMainRootTag>

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

我想解析器,它提供了我在一个有效的方式直接java pojo。

EN

回答 4

Stack Overflow用户

发布于 2013-02-09 22:56:00

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

票数 12
EN

Stack Overflow用户

发布于 2015-05-21 10:15:41

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

代码语言:javascript
复制
//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<Person> loader = unmarshaller.unmarshal(varElement, Person.class);
Person inputFromXml = loader.getValue();

而Person有适当的XML注释:

代码语言:javascript
复制
@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;
    }
}
票数 8
EN

Stack Overflow用户

发布于 2018-08-05 06:54:18

序列化和反序列化可以由JacksonXmlModule处理。

代码语言:javascript
复制
// 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> 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 = "<names>" +
                "<item><name>name</name><description>desc</description><note>note</note></item>" +
                "<item><name>name</name><description>desc</description><note>note</note></item>" +
                "</names>";

        try {
            List<Item> names = objectMapper.readValue(xml, new TypeReference<List<Item>>() {});
            names.forEach(item -> {

                assertEquals("name", item.getName());
                assertEquals("desc", item.getDescription());
                assertEquals("note", item.getNote());

            } );
        } catch (Exception e) { // IOException

        }


    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14789302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档