Java rassemblement et de l'UnMarshalling
Employé.xsd
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="1.0" elementFormDefault="qualified">
<xsd:include schemaLocation="Family.xsd"/>
<xsd:element name="NewFields">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="empFirstName" type="xsd:string" />
<xsd:element name="empLastName" type="xsd:string" />
<xsd:element name="family" type="FamilyFields" nillable="true" maxOccurs="unbounded" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
De la famille.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="1.0" elementFormDefault="qualified">
<xsd:complexType name="FamilyFields">
<xsd:sequence>
<xsd:element name="relation" type="xsd:string" />
<xsd:element name="firstName" type="xsd:string" />
<xsd:element name="lastName" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Une application tierce qui utilise ces 2 schémas de générer une chaîne de caractères xml comme -
<NewFields>
<empFirstName>Kevin</empFirstName>
<empLastName>Smith</empLastName>
<family>
<FamilyFields>
<relation>self</relation>
<firstName>New Kevin</firstName>
<lastName>New Smith</lastName>
</FamilyFields>
<FamilyFields>
<relation>wife</relation>
<firstName>Jennifer</firstName>
<lastName>Smith</lastName>
</FamilyFields>
</family>
</NewFields>
Le deuxième schéma est toujours un schéma fixe.
Mon exigence est d'analyser la relation tag et si la relation est "auto", j'ai besoin de remplacer empFirstName et empLastName avec firstName et lastName des champs respectifs.
Comment puis-je y parvenir?
EDIT 1 : l'Employé.xsd est dynamique et peut être n'importe quoi. Mais La Famille.xsd est statique et peuvent être importés à partir d'autres xsd.
OriginalL'auteur jagamot | 2011-09-30
Vous devez vous connecter pour publier un commentaire.
Le plan général: (a) carte de schéma XML des fichiers, (b) unmarshall le XML donné, (c) modifier le XML de l'objet en mémoire enfin (d) marshall l'objet modifié n'importe où vous voulez.
Carte votre schéma XML des fichiers
(Si vous prenez un conseil: le faire à la main! Générer JAXB entités avec XJC presque jamais sorties les choses que vous attendez et que vous pouvez obtenir beaucoup de temps si vous n'avez pas très simple schéma de fichiers à portée de main.)
Acquérir
JAXBContext
,Unmarshaller
etMarshaller
Traiter des messages XML
J'ai copier / coller de vos deux schéma de déclarations et de test XML et ces, qui travaillaient pour moi. Si vous obtenez
unexpected element
exception, peut-être que le XML que vous essayez de unmarshall/marshall a XML déclarations d'espace de noms. Que être un problème. (Si vous postez votre XML quelque part, comme pastebin je peux prendre un coup d'oeil.)Par ailleurs, j'ai utilisé JAXB 2.2.4-1 dans mes tests.
Vous avez raison, j'ai raté l'ajout de la XMLROOTElement annotation à l'FamilyFields classe! Merci!!!!
OriginalL'auteur Kohányi Róbert
Si vous avez un XSD ensuite manipuler le XML est le plus facile avec la liaison de données XML. À l'aide de l'XSD vous pouvez créer java bean comme des classes qui représentent le XSD. Maintenant, vous pouvez getters et setters sur la classe java et ensuite de sortie XML. Il y a beaucoup de liaison de données XML solutions. Essayez XML haricots:
http://xmlbeans.apache.org/
OriginalL'auteur sethu