Java : recuperer les donnees d'un fichier xml

Fermé
Eric - 24 nov. 2003 à 13:42
 Phil- - 22 déc. 2004 à 10:38
Bonjour, j'ai un petit probleme de debutant, et j'aurai besoin de qq petits eclaircissements ...
J'ai en document xml xml qui ressemble a ca :
<root>
<item1>
<item2
entier ="1"
booleen ="false"
chaine ="coucou"/>
<item2
entier = "2"
booleen = "true"
chaine = "coucou-bis"/>
</item1>
[/root]

et je cherche a le lire avec un programme java tout en recuperant les donnees avec leur type associé ... par exemple recuperer l'atteibut "entier" de item2 sous la forme d'un int pour m'en servir dans mon programme java Pour cela je me suis dit que c'etait utile de faire un schema avec un fichier xsd du genre :

"structure.xsd" :
<xs:element name='root' type='root'/>
<xs:element name='item1' type='item1'/>
<xs:element name='item2' type='item2'/>

<!-- Type "root" -->
<xs:complexType name='root'>
<xs:sequence>
<xs:element name='item1' type='item1'/>
</xs:sequence>
</xs:complexType>

<!-- Type "item1" -->
<xs:complexType name='item1'>
<xs:sequence>
<xs:element name="item2" type="item2" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>

<!-- Type "item2" -->
<xs:complexType name='item2'>
<xs:attribute name='entier' type='xs:integer' use='required'/>
<xs:attribute name='booleen' type='xs:boolean' use='required'/>
<xs:attribute name='chaine' type='xs:string' use='required'/>
</xs:complexType>

et dans mon programme java ca se passe comme ca pour l'instant ... j'ai utilisé sax pour parser mon document xml de cette maniere :


public MaClasse {
public MaClasse () {
System.setProperty("javax.xml.parsers.SAXParserFactory", "org.apache.xerces.jaxp.SAXParserFactoryImpl");
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
parser = sp.getXMLReader();
id = "http://apache.org/xml/features/validation/schema";
parser.setFeature(id,true);
id = "http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation";
parser.setProperty(id, "structure.xsd");

// MonContentHandler est une classe qui derive de ContentHandler ou je surcharge les methodes
saxReader.setContentHandler(new MonContentHandler());
saxReader.parse(uri); // uri est mon fichier xml
}
}


donc j'ai un premier probleme qui est que dans la classe MonContentHandler, pour la methode startElement(String nameSpaceURI, String localName, String rawName, Attributes attributs), attributs.getType(index) renvoi toujours CDATA (je ne sais pas si c'est normal, je m'attendais naivement a "integer", "string" ...), localName et attributs.getLocalName(index) sont vides, et
attributs.getValue(index) renvoi les differentes valeurs : 1, false, coucou etc ...
Donc au final je ne vois pas comment je peux faire pour que qd je rencontre l'attribut entier de item2 j'introduise dans mon programme java un entier qui a la valeur de l'attribut de l'attirbut ..

J'espere que j'ai ete clair et que vous pourrez m'eclairer ... il y a peut etre un moyen differents de faire n'hesitez pas a m'en faire part, je suis preneur !
merci !
A voir également:

1 réponse

Salut,

Je suis exactement ds le même problème que toi. As-tu trouvé une solution? ou cherches-tu encore et tjs comme moi :) ?

Phil
0