Je suis en train de parser de l'XML avec Xerces-Java, et je me retrouve face a 2 petits problemes.
1) J'aimerais faire disparaitre les text nodes correspondant aux whitespaces (genre newlines) automatiquement au parsage (il y a moyen, non ?)
2) Pourquoi je n'arrive pas a trouver mon Schéma précisé avec schemaLocation quand je précise un chemin relatif (ce qui marche quand je valide avec oXygen XML editor, un plugin Eclipse) ?
Je mets ci-dessous un extrait de l'XML, du Schéma et du code Java.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="myNS"> <xsd:element name="profile"> <xsd:complexType> <xsd:element name="task"> <xsd:complexType> <xsd:element name="Misc"> <xsd:complexType> <xsd:choice> <xsd:element name="login"> <xsd:complexType/> </xsd:element> <xsd:element name="logout"> <xsd:complexType/> </xsd:element> </xsd:choice> </xsd:complexType> </xsd:element> </xsd:complexType> </xsd:element> <xsd:attribute name="name" use="required"/> </xsd:complexType> </xsd:element> </xsd:schema>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <profile xmlns="myNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="myNS file:///path/name/hidden/profile.xsd" name="Test profile"> <task> <Misc> <login/> </Misc> </task> <task> <Misc> <logout/> </Misc> </task> </profile>Pour des raisons de "secret industriel", je n'ai fourni qu'un strict minimum, n'hésitez pas à demander plus, je ferais dans la mesure du possible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 DOMParser parser = new DOMParser(); ErrorHandler handler = new ErrorHandler() { public void warning(SAXParseException e) throws SAXException { System.out.println("[warning] "+e.getMessage()); } public void error(SAXParseException e) throws SAXException { System.out.println("[error] "+e.getMessage()); } public void fatalError(SAXParseException e) throws SAXException { System.out.println("[fatal error] "+e.getMessage()); throw e; } }; parser.setErrorHandler(handler); parser.setFeature("http://xml.org/sax/features/validation", true); parser.setFeature("http://apache.org/xml/features/validation/schema", true); parser.setFeature("http://apache.org/xml/features/dom/include-ignorable-whitespace",false); parser.parse(new InputSource(new FileReader(file))); Document doc = parser.getDocument();
Par ailleurs, ne cherchez pas trop dans le code Java. Il fonctionne au niveau de Java, je n'arrive juste pas a obtenir ce que je veux de Xerces.
Merci d'avance.
Partager