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

XSL/XSLT/XPATH XML Discussion :

[XSLT] Fusion de plusieurs XML


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 17
    Points : 12
    Points
    12
    Par défaut [XSLT] Fusion de plusieurs XML
    Bonjour,

    j'aimerais fusionner un nombre N (inconnu) de fichiers XML. J'ai donc décider de créer un fichier XML contenant les chemins :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" standalone="no"?>
    <files>
      <path>C:\Documents and Settings\TARGET TRY2.xml</path>
      <path>C:\Documents and Settings\TARGET TRY.xml</path>
    </files>
    Mes fichiers XML sont de la forme:

    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
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
      <?xml version="1.0" ?> 
    - <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">
    + <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
    .....
      </DocumentProperties>
    + <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
    .....
      </OfficeDocumentSettings>
    + <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
    .....
      </ExcelWorkbook>
    + <Styles>
    .....
      </Styles>
    - <Worksheet ss:Name="Service Rates">
    - <Names>
      <NamedRange ss:Name="_FilterDatabase" ss:RefersTo="='Service Rates'!R1C1:R1C7" ss:Hidden="1" /> 
      </Names>
    - <Table ss:ExpandedColumnCount="7" ss:ExpandedRowCount="346" x:FullColumns="1" x:FullRows="1">
      <Column ss:AutoFitWidth="0" ss:Width="108.75" /> 
      <Column ss:AutoFitWidth="0" ss:Width="266.25" /> 
      <Column ss:AutoFitWidth="0" ss:Width="72" /> 
      <Column ss:AutoFitWidth="0" ss:Width="56.25" ss:Span="3" /> 
    - <Row>
    - <Cell ss:StyleID="s21">
      <Data ss:Type="String">FAMILY</Data> 
      <NamedCell ss:Name="_FilterDatabase" /> 
      </Cell>
    - <Cell ss:StyleID="s21">
      <Data ss:Type="String">SERVICE</Data> 
      <NamedCell ss:Name="_FilterDatabase" /> 
      </Cell>
    - <Cell ss:StyleID="s21">
      <Data ss:Type="String">LEVEL</Data> 
      <NamedCell ss:Name="_FilterDatabase" /> 
      </Cell>
    - <Cell ss:StyleID="s21">
      <Data ss:Type="String">CODE</Data> 
      <NamedCell ss:Name="_FilterDatabase" /> 
      </Cell>
    - <Cell ss:StyleID="s21">
      <Data ss:Type="String">Rate</Data> 
      <NamedCell ss:Name="_FilterDatabase" /> 
      </Cell>
    - <Cell ss:StyleID="s21">
      <Data ss:Type="String">Currency</Data> 
      <NamedCell ss:Name="_FilterDatabase" /> 
      </Cell>
    - <Cell ss:StyleID="s21">
      <Data ss:Type="String">UOM</Data> 
      <NamedCell ss:Name="_FilterDatabase" /> 
      </Cell>
      </Row>
    - <Row>
    - <Cell ss:StyleID="s22">
      <Data ss:Type="String" /> 
      </Cell>
    - <Cell ss:StyleID="s22">
      <Data ss:Type="String">Account Technical</Data> 
      </Cell>
    - <Cell ss:StyleID="s22">
      <Data ss:Type="String">JM</Data> 
      </Cell>
    - <Cell ss:StyleID="s22">
      <Data ss:Type="String">XXJ</Data> 
      </Cell>
    - <Cell ss:StyleID="s22">
      <Data ss:Type="Number">1</Data> 
      </Cell>
    - <Cell ss:StyleID="s22">
      <Data ss:Type="String">EUR</Data> 
      </Cell>
    - <Cell ss:StyleID="s22">
      <Data ss:Type="String">DAY</Data> 
      </Cell>
      </Row>
      </Table>
    - <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
    - <Print>
      <ValidPrinterInfo /> 
      <PaperSizeIndex>9</PaperSizeIndex> 
      <HorizontalResolution>600</HorizontalResolution> 
      <VerticalResolution>0</VerticalResolution> 
      </Print>
      <TopRowVisible>25</TopRowVisible> 
    - <Panes>
    - <Pane>
      <Number>3</Number> 
      <ActiveRow>47</ActiveRow> 
      <ActiveCol>6</ActiveCol> 
      </Pane>
      </Panes>
      <ProtectObjects>False</ProtectObjects> 
      <ProtectScenarios>False</ProtectScenarios> 
      </WorksheetOptions>
      <AutoFilter x:Range="R1C1:R1C7" xmlns="urn:schemas-microsoft-com:office:excel" /> 
      </Worksheet>
      </Workbook>
    J'ai développer un XSL pour fusionner des fichiers XML en un seul(nouveau). Juste les lignes "Row" sont à conserver et à fusionner le reste ne dois pas bouger.
    Mon Ebauche XSL qui ne fonctionne pas :

    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
     
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
    <xsl:template match="/">
      <xsl:for-each select="files/path">
        <xsl:variable name="PathFile" select="."/>
        <xsl:variable name="Source" select="document($PathFile)" />
     
      <xsl:for-each select="$Source//Workbook/Worksheet/Table/Row">
        <xsl:copy-of select="."/>
      </xsl:for-each>
     
      </xsl:for-each>
    </xsl:template>
    </xsl:stylesheet>
    Ceux ci ne fonctionne malheureusement pas.
    Si quelqu'un est capable de m'aider je vous remercie d'avance!

    ++

  2. #2
    Membre actif Avatar de snoop
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 354
    Points : 294
    Points
    294
    Par défaut
    Pour fusionner plusieurs xml en un seul tu peux utliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        <xsl:template match="/">
                <xsl:copy-of select="document('file1.xml')"/>
                <xsl:copy-of select="document('file2.xml')"/>
                <xsl:copy-of select="document('file3.xml')"/>
        </xsl:template>
    avec par exemple la sélection d'une balise spécifique dans le xml comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:copy-of select="document('file2.xml')/tag1"/>
    Snoop

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    Il y a aussi, xinclude mais je ne sais plus tres bien ou cela en est.

  4. #4
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/">
      <xsl:apply-templates/>
    </xsl:template>
     
    <xsl:template match="path">
      <xsl:variable name="filePath><xsl:value-of select="."/></xsl:variable>
      <xsl:template match="path"><xsl:apply-templates select="document($filePath)/*"/>
    </xsl:template>
     
    <xsl:template match="Workbook/Worksheet/Table/Row"><xsl:copy-of select="."/></xsl:template>
     
    <xsl:template match="*"><xsl:apply-templates/></xsl:apply-templates>
    </xsl:stylesheet>

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Salut luta je te remercie de m'aider et les autres aussi.
    J'ai copier ton code et rectifié qq erreurs et j'obtiens (voir dessous) :

    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
     
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
    <xsl:template match="/">
      <xsl:apply-templates/>
    </xsl:template>
     
    <xsl:template match="path">
      <xsl:variable name="filePath"><xsl:value-of select="."/></xsl:variable>
      <xsl:apply-templates select="document($filePath)/*"/>
    </xsl:template>
     
    <xsl:template match="Workbook/Worksheet/Table/Row"><xsl:copy-of select="."/></xsl:template>
     
    <xsl:template match="*"><xsl:apply-templates/></xsl:template>
    </xsl:stylesheet>
    Resultat :

    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
     
    <?xml version='1.0'?>
     
     
     
      2006-07-18T16:46:16Z
      2006-07-18T16:46:22Z
      IBM
      10.6735
     
     
     
     
     
     
      9975
      15195
      0
      45
      False
      False
     
     
     
     
     
     
        FAMILY
        SERVICE
        LEVEL
        CODE
        Rate
        Currency
        UOM
     
     
     
        Account Technical Representative REMOTE SKILL SET
        Journey Man
        XXJ
        2
        EUR
        DAY
     
     
     
        Account Technical Representative REMOTE SKILL SET
        Master
        XXM
        2
        EUR
        DAY
     
    etc...
    Il me copie toutes les données présentes, pas seulement celle entre les les balises "Row" et ca ne copie pas les balises non plus.
    Pour etre plus précis, j'aimerai pouvoir réccupérer toutes les balises Row de mes fichiers d'origines et les mettre à la chaine (doublons ou pas) dans un nouveau XML...


  6. #6
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    J'ai bien avancé! Mais ça ne fait toujours pas ce que je veux

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
     
    <xsl:template match="path">
      <xsl:variable name="filePath"><xsl:value-of select="."/></xsl:variable>
      <xsl:apply-templates select="document($filePath)/*"/>
    </xsl:template>
     
    <xsl:template match="Workbook/Worksheet/Table/Row">
      <xsl:copy-of select="."/>
    </xsl:template>
     
    <xsl:template match="@*">
      <xsl:copy />
    </xsl:template>
     
    <xsl:template match="*">
      <xsl:element name="{name()}" >
        <xsl:apply-templates select="* | text() | @*"/>
      </xsl:element>
    </xsl:template>
     
    </xsl:stylesheet>
    Maintenant j'ai les balises mais ceci me renvoie toujours l'ensemble du fichier XML... La selection de la balise "Row" ne fonctionne pas je ne comprends pas...Quelqu'un pourrait m'eclaicir svp...?

Discussions similaires

  1. Fusion de plusieurs fichiers xml avec xslt
    Par majduuus dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 29/07/2013, 15h30
  2. [XSLT] document() pour plusieurs XML
    Par erwmat dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 13/05/2008, 09h47
  3. [XSLT]select sur plusieur documents XML
    Par jesus144 dans le forum XMLRAD
    Réponses: 3
    Dernier message: 15/06/2005, 10h56
  4. [XSLT] Diviser un fichiers xml en plusieurs pages html
    Par thibaut06 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/04/2005, 16h56
  5. [XSLT] Fusion de fichier XML ???
    Par webtheque dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 04/03/2005, 20h13

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