Bonjour,

Je suis confronté à un problème que je ne parviens pas encore à résoudre.

Voilà, j'ai un XML comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<racine xmlns="uri1" xmlns:xsi="uri2">
  <aaa>
    <bbb>BBBBB</bbb>
  </aaa>
  <ccc>
    <ddd>DDDDD</ddd>
  </ccc>
  <ddd>
    <data>
...
    </data>
  </ddd>
</racine>
La balise <data> peut contenir soit un sous arbre XML, soit du texte formaté.

Mon premier problème consiste à extraire le contenu de cette balise <data>.
Mon second, à ajouter ou non la déclaration <?xml?> dans le résultat selon que son contenu soit du XML ou du texte.

Voici les 2 fichiers XML:
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
<?xml version="1.0" encoding="UTF-8"?>
<racine xmlns="uri1" xmlns:xsi="uri2">
  <aaa>
    <bbb>BBBBB</bbb>
  </aaa>
  <ccc>
    <ddd>DDDDD</ddd>
  </ccc>
  <ddd>
    <data>
ligne11111111111111111111111
ligne22222222222222222222222
ligne33333333333333333333333
    </data>
  </ddd>
</racine>
et

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
<?xml version="1.0" encoding="UTF-8"?>
<racine xmlns="uri1" xmlns:xsi="uri2">
  <aaa>
    <bbb>BBBBB</bbb>
  </aaa>
  <ccc>
    <ddd>DDDDD</ddd>
  </ccc>
  <ddd>
    <data>
      <ppp xmlns="uri3">
        <sss>
          <qqq>QQQQQQQQ</qqq>
          <rrr>RRRRRRRR</rrr>
        </sss>
      </ppp>
    </data>
  </ddd>
</racine>
Et mon script XSLT qui ne fonctionne que dans le cas texte, et encore !
Car il me laisse des espaces au début !!!!!
Et aussi ne fonctionne pas si <data> contient du XML.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:x="uri1">
  <xsl:output method="text" omit-xml-declaration="yes" encoding="utf-8" />
  <xsl:strip-space elements="*" />
  <xsl:template match="/">
    <xsl:apply-templates select="/x:racine/x:ddd/x:data" />
  </xsl:template>
  <xsl:template match="*">
    <xsl:copy-of select="." />
  </xsl:template>
</xsl:stylesheet>
comme on le voit ici:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
ligne11111111111111111111111
ligne22222222222222222222222
ligne33333333333333333333333
Merci pour votre aide.