IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Transformation XSL : SAXException: Un DOM ne peut posséder plusieurs racines [DOM]


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Par défaut Transformation XSL : SAXException: Un DOM ne peut posséder plusieurs racines
    Bonjour,
    Je dois appliquer une XSL (A) a une XSL (B) pour générer une XSL (C).

    Seulement j'ai une erreur qui apparait !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Emplacement inconnu de l'erreur)org.xml.sax.SAXException: Un DOM ne peut posséder plusieurs racines !
    Voici mon code :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    	public static void main(String[] args) {
     
     
    		String xslInput = "http://localhost:8080/c/journal/get_template?templateId=NEWS-ITEM-TEMPLATE";
    		String xslTransformer 	= "http://localhost:8080/XSLtoXSL.xsl";
     
    			try {
    				Document XSLInputSource = getFileDocument(xslInput);
    				Document XSLTransformer = getFileDocument(xslTransformer);
     
    		    	Document doc =  getTransformResult(XSLInputSource,XSLTransformer); 
    		    	writeXmlFile(doc,"XSL.xsl");
     
    			} catch (IOException e) {
    				e.printStackTrace();
    			} catch (ParserConfigurationException e) {
    				e.printStackTrace();
    			} catch (SAXException e) {
    				e.printStackTrace();
    			} catch (URISyntaxException e) {
    				e.printStackTrace();
    			}
    	}
     
    	public static Document getTransformResult(Document XSLInput, Document XSLTransformer) {
    		DOMResult resultat = new DOMResult(); 
    		Document doc = null;
    		try {				
    			TransformerFactory fabrique = TransformerFactory.newInstance();		
    			Transformer transformer = fabrique.newTransformer(new DOMSource(XSLInput));			
    	    	transformer.setOutputProperty(OutputKeys.METHOD, "xml");
    	    	transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    	    	transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    	    	transformer.transform(new DOMSource(XSLTransformer), resultat);
    	    	doc = (Document) resultat.getNode();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return doc;
    	}
     
    	public static Document getFileDocument(String file) throws IOException, ParserConfigurationException, SAXException, URISyntaxException {
    		Document InputDocument = null;
    		URL fileUrl = new URL(file);
    		URLConnection FileURLConnection = fileUrl.openConnection ( ) ;
    		HttpURLConnection httpFileConnection = (HttpURLConnection) FileURLConnection;
    		int responseCodeInput = httpFileConnection.getResponseCode () ;
    		if ( responseCodeInput != HttpURLConnection.HTTP_OK ) {
    			System.out.println("NOT HTTP OK");
    	    } else {
    	    	InputStream streamInput = httpFileConnection.getInputStream () ;
    	    	DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
    	    	fabrique.setNamespaceAware(true);
    			DocumentBuilder constructeur = fabrique.newDocumentBuilder();  
    			InputDocument = constructeur.parse(streamInput);	 
    			//source = new DOMSource(InputDocument); 
    	    }
    		return InputDocument;		
    	}
    L'erreur apparait a la ligne : doc = (Document) resultat.getNode();

    J'ai bien sur vérifié les URL de mes 2 fichiers d'entrée, qui sont bons...

    Help !

  2. #2
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Par défaut re
    Aprés test, c'est la transformation qui foire, pourtant j'ai testé la transformation dans Oxygen et le résultat est bon !!

    Qu'est ce qui peut faire qu'en passant par Java ça merde ??

    Ma feuille de style qui modifie une autre feuille de style:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
    	<xsl:template match="*">		
    		<xsl:copy>
    			<xsl:copy-of select="@*"/>
    			<xsl:apply-templates/>
    		</xsl:copy>
    	</xsl:template>
    	<xsl:template match="xsl:template[@match]">
    		<xsl:copy>
    			<xsl:copy-of select="@*"/>
    			<xsl:attribute name="match" >result</xsl:attribute>			
    			<xsl:apply-templates/>
    		</xsl:copy>
    		<xsl:element name="xsl:template">
    			<xsl:attribute name="match" >/result-set</xsl:attribute>
    			<xsl:element name="table">
    				<xsl:attribute name="width" >100%</xsl:attribute>	
    				<xsl:element name="xsl:for-each">
    					<xsl:attribute name="select" >result</xsl:attribute>
    					<xsl:element name="tr">
    						<xsl:attribute name="style" >border:2px black solid;</xsl:attribute>
    						<xsl:element name="td">
    							<xsl:element name="xsl:apply-templates">
    								<xsl:attribute name="select" >.</xsl:attribute>
    							</xsl:element>	
    						</xsl:element>
    					</xsl:element>					
    				</xsl:element>
    			</xsl:element>		
    		</xsl:element>
    	</xsl:template>
    </xsl:stylesheet>
    Un exemple de feuille de style à traiter
    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
     
    <?xml version="1.0"?>
     
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:template match="/">
        <h3>
          <xsl:value-of disable-output-escaping="yes" select="root/dynamic-element[@name='title']/dynamic-content"/>
        </h3>
        <br/>
          <xsl:value-of disable-output-escaping="yes" select="root/dynamic-element[@name='intro-text']/dynamic-content"/>
        <br/>
          <xsl:value-of disable-output-escaping="yes" select="root/dynamic-element[@name='full-text']/dynamic-content"/>
        <br/>
      </xsl:template>
    </xsl:stylesheet>
    Le mauvais résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?xml version="1.0" encoding="UTF-8"?><h3></h3><br/><br/><br/>
    Et là je comprends l'erreur "Un DOM ne peut posséder plusieurs racines !"...

  3. #3
    Membre éprouvé
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    Par défaut
    Un document Xml ne doit avoir qu'une seule balise racine. Par exemple, la balise racine d'un document html est <html>.
    ton document résultat contient plusieurs balises racines (h3, br, br et br) d'où l'erreur.

  4. #4
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Par défaut re
    J'ai bien compris d'ou venait l'erreur "1 seule racine" mais je ne comprendsp as pourquoi j'ai ceci comme réultat de transformation...

    Sous Oxygen tout marche nickel, mes fichiers XSL sont bien formés ! Alors pourquoi ça merde en passant par Java ??

  5. #5
    Membre éprouvé
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    Par défaut
    Je pense que tu as un probleme d'inversion dans ton code.
    En effet, lorsque tu crée ton transformer c'est pas ton fichier d'entrée qu'il faut passer mais ton fichier de transformation. et la method transform, elle, prend le fichier à transformer en paramêtres.
    code original :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Transformer transformer = fabrique.newTransformer(new DOMSource(XSLInput));
    ...
    transformer.transform(new DOMSource(XSLTransformer), resultat);
    Code corrigé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Transformer transformer = fabrique.newTransformer(new DOMSource(XSLTransformer) ));
    ...
    transformer.transform(new DOMSource([COLOR="Green"]XSLInput/COLOR]), resultat);

  6. #6
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 39
    Par défaut merci
    Merci
    On ne trouve jamais ses propres erreurs, si grossières soient elles, quand on code seul...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#]Transformation XSL
    Par boleduch dans le forum ASP.NET
    Réponses: 6
    Dernier message: 12/10/2005, 13h39
  2. [XSL] Transformation xsl et jeu de caractères cyrillique
    Par Maximil ian dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 01/09/2005, 11h41
  3. Utilisation de MSXML pour la transformation XSL
    Par Supergizmo dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 25/07/2005, 14h02
  4. [PLUGIN] Plugin de transformation XSL ?
    Par elitost dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 20/10/2004, 09h39
  5. Transformation XSL et caractères spéciaux
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 4
    Dernier message: 28/04/2003, 10h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo