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 :

Mise en forme de XML obtenu depuis une String


Sujet :

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

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2012
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 11
    Par défaut Mise en forme de XML obtenu depuis une String
    Bonjour à tous,
    Je travaille actuellement sur une application web qui utilise des fichiers XML. Sans entrer dans les détails, l'application importe des fichiers XML et les met dans une base de données. Une fois que la base de données est remplie il faut pouvoir visionner ce qui est stocké, et c'est là que j'ai un problème.

    Si on résume, grâce à JPA j'ai des objets JAVA qui contiennent les informations de la base de données que je souhaite afficher. J'ai par exemple accès à la définition que je souhaite afficher, en particulier.

    J'ai donc la String suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <def-root>
    The <fen>Quantity</fen>-denoting <t>Target</t> word.
    <ex>I had a <t><fex name="Quantity">heap</fex></t> of troubles.</ex>
    </def-root>
    Je voudrais afficher quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    The Quantity denoting Target word.
    I had a heap of troubles.
    Et là je suis perdu... Pour l'instant j'ai tenté de créer une classe utilisant JDOM possédant une méthode avec une String en argument, qui "lirait" le xml et serait à même de renvoyer quelque chose de mis en forme. Mais honnêtement je nage, j'imagine que ça se voit.

    Je mettrai de la bonne volonté pour expliquer plus en profondeur si vous le souhaitez, donc n'hésitez pas à me demander plus d'informations dans le cas où ce que j'ai mis ne suffit pas !

    Antoine

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Cela dépend essentiellement de la technologie que tu utilises pour afficher du texte mis en forme sur ton site. Quand il ne vient pas d'une donnée XML, comment tu fais, quoi.

    Mais en gros, l'idée est que tu as besoin de transformer ton XML en autre chose. Par exemple en HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <div class="def">
    The <em class="def-fen">Quantity</em>-denoting <em class="def-target">Target</em> word.
    <p class="def-ex">I had a <em class="def-target"><em class="def-fex">heap</em></em> of troubles.</p>
    </div class="def">
    Ce genre de transformation se fait plutôt bien avec XSLT. En utilisant JDOM on peut le faire avec XSLTransformer. Reste à apprendre XSLT pour s'en servir.

    Ou alors, tu programmes toi-même, en partant de ton bout de XML, sa conversion en un autre bout de XML-HTML. Moins pratique, mais ça évite d'apprendre un autre langage.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2012
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 11
    Par défaut
    Bonjour,
    et merci pour la réponse. J'ai regardé ce dont tu parlais et en effet ça me sera utile, mon problème principal c'est que je n'ai pas la structure un fichier XML + un fichier XSL.

    Pour l'instant, j'ai plusieurs idées, mais à chaque fois je tombe dans une impasse. Je vais essayer d'expliquer mon problème de façon claire, en reprenant du début.

    Depuis la base de données, j'obtiens une String qui contient du XML, mais ce XML n'est pas complet (pas d'en-tête, mon premier post donne un exemple).
    Mon but est d'afficher cette String dans un dialog de Primefaces avec une mise en forme correcte (cf. mon premier post).


    Pour l'instant, mon dialog de Primefaces c 'est ça :
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
                    xmlns:ui="http://java.sun.com/jsf/facelets"
                    xmlns:h="http://java.sun.com/jsf/html"
                    xmlns:p="http://primefaces.org/ui"
                    xmlns:f="http://java.sun.com/jsf/core"
                    xmlns:composite="http://java.sun.com/jsf/composite"
                    xmlns:svg="http://java.sun.com/jsf/composite/svg"
                    xmlns:c="http://java.sun.com/jsp/jstl/core">
     
        <composite:interface>
            <composite:attribute name="index" required="true" />
        </composite:interface>
     
        <composite:implementation>
            <p:dialog id="reportFrameDialog" appendToBody="true" header="#{bundle.Header_ReportFrame} #{frameController.framesToReport.get(cc.attrs.index).name}" widgetVar="reportFrameDialog#{cc.attrs.index}" width="600" height="450" maximizable="true" minimizable="true" dynamic="true" showEffect="fade" hideEffect="fade"> 
     
                <h1><h:outputText value="#{frameController.framesToReport.get(cc.attrs.index).name}" /> </h1>
                <br/>
                <h2><h:outputText value="#{bundle.ViewFrameTitle_definition}"/></h2>
                <h:outputLabel value="#{frameController.framesToReport.get(cc.attrs.index).definition}" />           
                <br/>
                <h2><h:outputText value="#{bundle.ViewFrameTitle_semanticType}"/></h2>
                <c:forEach items="#{frameController.framesToReport.get(cc.attrs.index).semanticTypeList}" var="st">
                    <h:outputText value="#{st.name}, " />
                </c:forEach>
                <h2><h:outputText value="#{bundle.ViewFrameTitle_frameElement}"/></h2>
     
                <b><h:outputText value="#{bundle.ViewFrameTitle_core}"/></b>
                <c:forEach items="#{frameController.framesToReport.get(cc.attrs.index).frameElementList}" var="fe">
                    <h:panelGrid columns="2">
                        <c:if test="#{fe.type.equals('Core')}" >
                                <h:outputText value="#{fe.name}"/>
                                <h:outputText value="#{fe.definition}" />
                        </c:if>
                    </h:panelGrid>
                </c:forEach>   
                <b><h:outputText value="#{bundle.ViewFrameTitle_coreunexpressed}"/></b>
                <c:forEach items="#{frameController.framesToReport.get(cc.attrs.index).frameElementList}" var="fe">
                    <h:panelGrid columns="2">
                        <c:if test="#{fe.type.equals('Core-Unexpressed')}" >
                                <h:outputText value="#{fe.name}"/>
                                <h:outputText value="#{fe.definition}" />
                        </c:if>
                    </h:panelGrid>
                </c:forEach>
                <b><h:outputText value="#{bundle.ViewFrameTitle_peripheral}"/></b>
                <c:forEach items="#{frameController.framesToReport.get(cc.attrs.index).frameElementList}" var="fe">
                    <h:panelGrid columns="2">
                        <c:if test="#{fe.type.equals('Peripheral')}" >
                                <h:outputText value="#{fe.name}"/>
                                <h:outputText value="#{fe.definition}" />
                        </c:if>
                    </h:panelGrid>
                </c:forEach>
                <b><h:outputText value="#{bundle.ViewFrameTitle_extrathematic}"/></b>
                <c:forEach items="#{frameController.framesToReport.get(cc.attrs.index).frameElementList}" var="fe">
                    <h:panelGrid columns="2">
                        <c:if test="#{fe.type.equals('Extra-Thematic')}" >
                                <h:outputText value="#{fe.name}"/>
                                <h:outputText value="#{fe.definition}" />
                        </c:if>
                    </h:panelGrid>
                </c:forEach>
                <h2><h:outputText value="#{bundle.ViewFrameTitle_lu}"/></h2>
                <c:forEach items="#{frameController.framesToReport.get(cc.attrs.index).lexUnitList}" var="lu">
                    <h:outputText value="#{lu.name}, "/>
                </c:forEach>
                <br/>      
                <h:outputText value="Created by #{frameController.framesToReport.get(cc.attrs.index).createdBy}, on #{frameController.framesToReport.get(cc.attrs.index).createdDate}" />
     
            </p:dialog>
        </composite:implementation>
     
    </ui:composition>
    Cependant ce n'est pas satisfaisant du tout puisqu'on ne fait qu'afficher du code source (ça pique les yeux).


    Ma première idée c'est de faire une fonction qui fait des XML éphémères à l'aide de java.io.FileReader et java.io.FileWriter basique. Par exemple, je crée un fichier, je mets un en-tête, je colle le contenu des String à afficher, je mets pied-de-page ; et ensuite j'ai un fichier XML classique. Avec un fichier XSL permanent, il devrait être possible de mettre en forme le tout. Le problème c'est que je sais pas comment je vais gérer l'affichage d'un fichier XML éphémère avec Primefaces.

    Par ailleurs, si je me mets vraiment à essayer de parser le XML que j'ai, déjà vu que c'est pas un véritable fichier XML ça m'a l'air plus pénible, et ensuite au final je vais faire quelque chose du genre XML=>objets Java=>XML, ce qui me semble un peu lourd.

    En fait je suis plutôt paumé


    EDIT : avec Primefaces, je viens de voir qu'on peut afficher du HTML avec les balises prises en compte en mettant escape="false" dans les attributs du outputText. Donc si j'arrive à transformer le XML en HTML ça devrait être tranquille à traiter par derrière.
    Mon but se précise : réaliser une fonction qui prend en entrée une String avec du XML dedans, et qui ressort une String avec du HTML dedans.

Discussions similaires

  1. Mise en forme de l'affichage dans une liste
    Par nunurs83 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/05/2007, 20h47
  2. [Forms]Envoi des messages depuis une interface Forms
    Par MOUELY Daniel dans le forum Forms
    Réponses: 1
    Dernier message: 26/04/2007, 11h59
  3. [MySQL] Mise en forme de la date dans une ligne
    Par Donald08 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 01/08/2006, 13h28
  4. Mise en forme dans un RTF via une syntaxe personnelle
    Par sqwalichou dans le forum Autres langages
    Réponses: 2
    Dernier message: 24/02/2006, 22h19
  5. [debutant]mise en forme xls+xml
    Par freums dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 07/11/2005, 15h04

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