lire fichier Xml avec JAXB
je veux lire un fichier xml (comme ci-dessous), mais je reçois Exception.
pourriez-vous s'il vous plaît aider moi comment puis-je résoudre ce problème?
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation=
"file:///C:/Documents%20and%20Settings/mojalal/Desktop/FirstXSD.xml">
<log>
<property key="firstKey" value="firstValue"></property>
<property key="secoundKey" value="secoundKey"></property>
<property key="thirdKey" value="thirdValue"></property>
</log>
<env>
<property key="firstenv" value="fo"></property>
<property key="123" value="333"></property>
</env>
</config>
et c'est mon code que je veux lire le fichier xml
public class ReadXMLFilewithJAXB {
private static List<Property> customer;
@SuppressWarnings("unchecked")
public static void main(String[] args) {
try {
File file = new File("c:\\FirstXML.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Log.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
customer = (List<Property>) jaxbUnmarshaller.unmarshal(file);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
enfin c'est l'Exception qui-je l'obtenir
javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"config"). Expected elements are (none)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:631)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:236)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:231)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:105)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1038)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:467)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:448)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:137)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:626)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3103)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:922)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:200)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:173)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:142)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:151)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:169)
at firstExample.ReadXMLFilewithJAXB.main(ReadXMLFilewithJAXB.java:21)
Env Classe POJO
public class Env {
List<Property> properties2;
public Env() {
}
public Env(List<Property> properties2) {
super();
this.properties2 = properties2;
}
public List<Property> getProperties2() {
return properties2;
}
public void setProperties2(List<Property> properties2) {
this.properties2 = properties2;
}
Journal de Classe POJO
@XmlRootElement
public class Log {
List<Property> properties=new ArrayList<Property>();;
public Log(){
}
public List<Property> getProperties() {
return properties;
}
public void setProperties(List<Property> properties) {
this.properties = properties;
}
Les informations qui sont que vous essayez d'obtenir à partir du document XML? Êtes-vous intéressé seulement par les propriétés sous le
je veux obtenir 2 séparés Liste à partir de mon fichier XML .
cela signifie que obtenir List1 pour tous "clé" et "valeur" qui sont en <log> tag et ensuite obtenir la liste 2 pour toutes les "clés" et "valeur" qui sont en <env> tag.
Double Possible de Comment lire un fichier XML avec JAXB?
log
élément?je veux obtenir 2 séparés Liste à partir de mon fichier XML .
cela signifie que obtenir List1 pour tous "clé" et "valeur" qui sont en <log> tag et ensuite obtenir la liste 2 pour toutes les "clés" et "valeur" qui sont en <env> tag.
Double Possible de Comment lire un fichier XML avec JAXB?
OriginalL'auteur Reza | 2013-06-12
Vous devez vous connecter pour publier un commentaire.
Vous devez vous assurer que vous avez associé une classe de l'élément racine du document XML à l'aide de
@XmlRootElement
ou@XmlElementDecl
(voir: http://blog.bdoughan.com/2012/07/jaxb-and-root-elements.html). Alternativement, vous pouvez utiliser l'une des unmarshal des méthodes qui prennent unClass
paramètre à dire JAXB quel type d'objet vous sont unmarshalling.Modèle De Domaine (Config)
Je recommande d'avoir un domaine classe comme suit à partir de laquelle vous pouvez obtenir les deux listes de
Property
objets.Démo
d'entrée.xml/Sortie
FirstXSD.xml
?OriginalL'auteur bdoughan
Lorsque vous décrivant un modèle XML, vous devez commencer avec une racine de l'entité (dans votre cas, c'est la
<config>
élément).Et puis vous parse le XML comme suit:
c'est mon problème....
Chers ", mikhaïl" .. malheureusement, client = config.getLog().getProperties().size(); return "0" . pourquoi?
Eh bien, je ne peux pas vous dire sans voir votre mise en œuvre de Journal et Env entités. Pourriez-vous veuillez les poster?
j'ajoute le Journal et Env Classe POJO à votre Code
OriginalL'auteur Mikhail