[XML] Faire le ménage dans un .xml

Bon, je m’excuse par avance de la trivialié de la question (si trivialité il y a) mais mes connaissances sur XML ne sont que scolaires et j’ai assez peu pratiqué la chose… :stuck_out_tongue:

Donc mon soucis est le suivant : j’ai le WSDL d’un web service dans les papattes dont je ne désire utiliser qu’une seule opération.
Sans rentrer dans le détail, le soft qui va digérer le WSDL n’apprécie que très moyennement la taille de ce dernier (quelques 600ko). Mon objectif est donc de faire le ménage dans le fichier interface de manière à ne garder que les éléments utiles pour l’opération qui m’intéresse. Vala en gros.

Pour simplifier le problème, on va virer la partie WSDL : en gros, j’ai dans mon document un élément que je considère comme père avec derrière lui tout un tas d’autres éléments en arbre. Et je veux virer tout ce qui ne touche pas de près ou de loin à la définition du père.

J’imagine qu’il faudrait que je passe par une XSLT [FEAR] ou quelque chose dans ce goût là ?..?

Help…

'tain je l’ai fait en TP pendant l’année et pas foutu de m’en rappeler… après une brève recherche, un truc comme ça peut être?

Donc un XSLT pour transformer ton XML source en XML final qui ne contiendra que le noeud qui t’intéresse.

[code]<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version=“1.0” xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”>

<xsl:template match=“ton_noeud”>
xsl:copy
<xsl:apply-templates select="* | text() | @*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>[/code]

Bon, pataper si jme goure hein…

Mici bien !
Donc avec ça je pars du père et je récupère bien les fils au fur et à mesure ?

Tiens question con : comment relier le XSLT au XML après coup ?
Dans mes souvenirs (d’il y’a pfiouu… 15 longues journées mais j’ai pas eu de cours dessus) il fallait que le XML réfère au XSLT pour pouvoir l’utiliser. Le contraire ne semblait pas possible…

edit: pour copier les fils, il faut utiliser copy-of, et pas copy, on dirait : http://www.w3schools.com/xsl/el_copy.asp

Excellente question (pardon, je craque) ça… :stuck_out_tongue:

Il faut mettre ça en tête de ton fichier XML, Lucasbfr a raison, ça se fait côté XML:

<?xml-stylesheet type="text/xsl" href="ton_fichier_XSL.xsl"?>

Par contre ouais y’a une ruse entre copy-of et copy, je crois que c’est pour ça que qu’il y a cette ligne chelou dans le bout de XSL que j’ai mis plus haut: <xsl:apply-templates select=« * | text() | @* »/>. Genre ça veut dire qu’il copie tout ce qu’il trouve à un niveau inférieur…

Ou sinon jme goure :stuck_out_tongue:

Et tel que c’est là, ça me transforme directement mon fichier initial non ?

–edit–
Et question subsidiaire : comment je fais pour faire tourner un xsl déjà ? (mon dieu, j’ai honte :stuck_out_tongue: )

Oui, si tu ouvres ton xml et que dedans y’a un lien vers ton XSL, tu auras devant les oeils un XML modifié à la volée. Ton fichier XML de base reste identique à lui même, seule la présentation des données change. Je sais pas si c’est ta question. Ensuite libre à toi de sauvegarder dans un XML final.

Ah ok, je commence à voir. Des souvenirs remontent à la surface… :stuck_out_tongue:
Je tente.

Muf !
Bon évidement j’ai une erreur mais j’ai du mal à voir là :

[code]Référence à un préfixe d’espace de noms non déclaré : ‘xsl’. Erreur de traitement de la ressource file:///P:/99-Autres/DEV/…

<xsl:template match=“ProcessUW”>[/code]

Le NS xsl est défini pourtant…

[code]<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version=“1.0” xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”>

<xsl:template match=“ProcessUW”>
xsl:copy
<xsl:apply-templates select="* | text() | @*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>[/code]

(ah non je me tais, ca m’a l’air juste)

comment tu déclares le xslt dans ton xml ?

Sinon, je pense pas que ca soit ca, mais normalement il te faudrait une ligne du genre au début de ta stylesheet

J’ai fait un test rapide chez moi et, si ca fait pas du tout ce que je veux, j’ai pas d’erreur

Bin je la déclare comme ça :

Mais en fait je n’ai plus d’erreur de NS maintenant, il m’affiche quelque chose, mais pas tout à fait ce que je veux : ça ressemble à la concaténation des descriptions de certaines de mes opérations…
Je me dis qu’il y a peut être un soucis avec la recherche en elle-même.

Pour info, le père que je recherche ressemble à ça (Papa, si tu m’entends… - pardon, je m’égare) :

<s:element name="ProcessUW"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="content" type="tns:XMLProcessUwContent" /> </s:sequence> </s:complexType> </s:element>

Je sais plus trop dans quelles circonstances, mais ça m’est arrivé plusieurs fois d’avoir en vrac tout ou partie des CDATA de mon XML. C’est très moche. Mais je me demande si tu n’as pas le résultat que tu veux, sauf qu’il l’affiche mal (genre en fait tu as bien un bel XML, sauf qu’au lieu de t’afficher balises et indentation, il te crache les CDATA en vrac quand tu regardes ça avec un browser).

Essaye peut être de sauvegarder ton résultat et de l’ouvrir avec un éditeur de texte. Peut être que tu verras les balises (je propose ça parce que je crois bien l’avoir vécu en TP, on avait des merdes avec FF et IE qui affichaient pas la même chose).

[quote=« LeGzo, post:13, topic: 26661 »]Je sais plus trop dans quelles circonstances, mais ça m’est arrivé plusieurs fois d’avoir en vrac tout ou partie des CDATA de mon XML. C’est très moche. Mais je me demande si tu n’as pas le résultat que tu veux, sauf qu’il l’affiche mal (genre en fait tu as bien un bel XML, sauf qu’au lieu de t’afficher balises et indentation, il te crache les CDATA en vrac quand tu regardes ça avec un browser).[/quote]Nope, c’est pas les bonnes données a priori (90% sûr).

[quote=« LeGzo, post:13, topic: 26661 »]Essaye peut être de sauvegarder ton résultat et de l’ouvrir avec un éditeur de texte. Peut être que tu verras les balises (je propose ça parce que je crois bien l’avoir vécu en TP, on avait des merdes avec FF et IE qui affichaient pas la même chose).[/quote]Eh pas con ça ! :stuck_out_tongue: J’essaye demain.
Et s’il y a d’autres avis sur la question hein… :stuck_out_tongue:

–edit–
Bon bah demain c’est aujourd’hui et après essai, l’affichage du code de ma page bizarre me donne… le fichier xml dans lequel j’ai rajouté la reférence au XSLT. Pas plus. /me est au point mort là…

Ah ah, /me est très con, /me vient d’en avoir à nouveau la preuve.

Bon, je viens de me rendre compte que le .xml que je veux transformer est en fait un schema. Je me disais bien aussi qu’il avait une tête qui me revenait pas ce fichier… Je me désespère moi-même des fois.
Donc la question devient donc : sachant un schema n’est finalement qu’un doc xml, peut-on appliquer un xsl sur un schema ? J’aurais tendance à dire que oui [-edit- définitivement oui, c’est possibe] mais je ne vois pas trop comment.

Pas d’autres xeumeuleu masta qui traînent dans le coin par hasard ?..?

Ah oui, j’oubliais : HELP ! :stuck_out_tongue:

[quote=« Tupperware_ass, post:15, topic: 26661 »]Ah ah, /me est très con, /me vient d’en avoir à nouveau la preuve.

Bon, je viens de me rendre compte que le .xml que je veux transformer est en fait un schema. Je me disais bien aussi qu’il avait une tête qui me revenait pas ce fichier… Je me désespère moi-même des fois.[/quote]
:stuck_out_tongue:

Ouais bon alors là je sais pas trop quoi te dire… Je suis vraiment bien loin d’être un XML guru, mais bon déjà faudrait qu’on en sache un peu plus sur ton problème, si j’ai bien pigé ça te sort juste toutes les CDATA de ton XML de départ, et ton XSL c’est celui posté plus haut?

En fait, c’est pas si simple :stuck_out_tongue:
Ce que ça me sort, c’est pas des données qui se trouve dans le schema. Et oui. 'sais pô d’où elles viennent.

Anyway. Ma seule avancée de la journée aura été l’affichage de tous les attributs de mes balises à la suite (que du texte quoi) grâce à ça :

[code]<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version=« 1.0 »
xmlns:xsl=« XSLT Namespace »
xmlns:s=« http://www.w3.org/2001/XMLSchema »>
<xsl:output method=« xml »/>

<xsl:template match=« s:element »>
xsl:copy
<xsl:apply-templates select=« * | text() | @* »/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>[/code]
Youpi, c’est la fête…

:stuck_out_tongue:

ps : après consultation de divers personnes dans la boite (de ceux qui ne sont pas en vacances - soit 2 personnes au total), je serais face à un problème épineux. Mouais…

Je suis désolé, j’ai vraiment pas d’idée. Par contre je suis intéressé si tu avances et que tu arrives à faire ce que tu voulais pour connaître la façon que tu auras utilisée.

Bon courage :stuck_out_tongue: