como processar xml para objeto java?

eu tenho um XML que é usado para a configuração de algumas regras, não tem estrutura complexa, mas esta configuração é usada em qualquer lugar em meu sistema, então gostaria de analisar esse XML para java objeto de design e projeto singleton modo, de qualquer maneira que eu possa usá-lo para desempacotar XML para Java objeto diretamente, sem escrever muito códigos?

Fiz algumas pesquisas no Google e o JAXB conhecido é uma escolha, a minha aplicação é apenas alguns tipos de programa de ferramentas que lêem regras e depois seguem as coisas, o JAXB pode ser usado para o serviço web mais amplamente, ele se encaixa em meus projetos?

Se sim, a questão mais importante é, eu usei o xjc para gerar a classe de fonte de objetos java de acordo com o arquivo xsd, depois do unmarshal eu vou obter diretamente esses objetos configurationType, é necessário Eu Converter novamente, (das classes JaxB para minha configuração de objeto java pojo), eu vejo que a maioria do codificador fez isso, mas por quê? porque eles são alguns dados, apenas a partir do objeto gerado para JAXB e copiar para nós mesmos criou objeto POJO

 24
Author: C.c, 2013-05-03

5 answers

O JAXB é uma solução ideal. Mas você não precisa necessariamente de xsd e xjc para isso. Na maioria das vezes você não tem um xsd, mas você sabe o que é o seu xml. Basta analisar o seu xml, por exemplo,

<customer id="100">
    <age>29</age>
    <name>mkyong</name>
</customer>

Criar A(S) Classe (s) de modelo necessária (s):

@XmlRootElement
public class Customer {

    String name;
    int age;
    int id;

    public String getName() {
        return name;
    }

    @XmlElement
    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    @XmlElement
    public void setAge(int age) {
        this.age = age;
    }

    public int getId() {
        return id;
    }

    @XmlAttribute
    public void setId(int id) {
        this.id = id;
    }

}

Tenta não ser Marshal:

JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Customer customer = (Customer) jaxbUnmarshaller.unmarshal(new File("C:\\file.xml"));
Verifica os resultados, corrige os erros!
 52
Author: Evgeniy Dorofeev, 2014-08-10 18:48:13

Para realizar Unmarshall usando JAXB:

1) Converter XML dado para XSD (por si próprio ou pelo Conversor online),

2) Criar um projecto JAXB no eclipse,

3) Criar um ficheiro XSD e colar que tenha convertido o conteúdo XSD nele,

4) carregue com o botão direito no **ficheiro XSD--> gerar--> Classes JAXB-->siga as instruções(isto irá criar todo o nessasário .java files in src, i.e., one package-info, object factory and POJO class),

5) Criar outro .ficheiro java em src para operar operação unmarshall, e geri-lo.

Happy Coding !!

 5
Author: Soumya Sarkar, 2015-09-18 11:39:59

Uma coisa que é realmente importante de entender considerando que você tem um arquivo XML como:

<customer id="100">
    <Age>29</Age>
    <NAME>mkyong</NAME>
</customer>
Lamento informá-lo, mas ...
@XmlElement
public void setAge(int age) {
    this.age = age;
}

Não o ajudará, pois tenta procurar por "idade" em vez do nome do elemento "Idade" do XML.

Encorajo-o a indicar manualmente o nome do elemento correspondente ao do ficheiro XML:

@XmlElement(name="Age")
public void setAge(int age) {
    this.age = age;
}

E se tiver, por exemplo:

@XmlRootElement
@XmlAccessorType (XmlAccessType.FIELD)
public class Customer {
...

Significa que irá usar feijões java por omissão, e neste momento se você indique que não deve definir outro

@XmlElement(name="NAME")

Anotação acima de um método de setter para um elemento {[5] } vai falhar ao dizer que não pode haver dois elementos em uma única variável.

Espero que ajude.
 4
Author: aks, 2016-11-07 18:51:25

O JAXB é uma escolha fiável, uma vez que faz um mapeamento suave de classes xml para classes java. Mas há outros quadros disponíveis, aqui está um deles:

Https://code.google.com/p/xmappr/

 3
Author: Juned Ahsan, 2013-05-03 17:36:21

Acho que {[[0]} é uma boa escolha para serializing/deserializing feijão com XML.

Ver: Como usar a mola para marshal e unmarshal xml?

 1
Author: bluearrow, 2017-11-23 05:48:05