Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/08/2008, à 13:25

P'titeScarabée

shell : générer XML à partir des variables

Bonjour à tous,

Encore une fois, avec le peu de connaissances, je fais appel à vous big_smile

Je voudrais générer un fichier xml à partir des variables :

Par exemple : J'ai 4 variables

Le fichier XML aura cette forme :

<?xml version="1.0" encoding="UTF-8"?>
<testcases>
    <testcase name="$var1">
        <summary><![CDATA[$var2]]></summary>
        <steps><![CDATA[$var3]]></steps>
        <expectedresults><![CDATA[$var4]]></expectedresults>
    </testcase>
</testcases>

Merci d'avance big_smile

#2 Le 13/08/2008, à 14:05

thy

Re : shell : générer XML à partir des variables

bonjour,

a quel endroit tu bloques ?

c'est écrire un fichier qui te pose problème ?
ou afficher le contenu d'une variable ?

Hors ligne

#3 Le 13/08/2008, à 14:44

P'titeScarabée

Re : shell : générer XML à partir des variables

thy a écrit :

bonjour,

a quel endroit tu bloques ?

c'est écrire un fichier qui te pose problème ?
ou afficher le contenu d'une variable ?

Finallement, je m'en sors tout seul, avec que des echo, pas très élégant mais ca donne ce que je voudrais, c'est l'essentiel.

Merci quand même thy big_smile

ps : Merci également au modo de mettre [résolu] car je peux pas modifier.

#4 Le 13/08/2008, à 15:27

Totor

Re : shell : générer XML à partir des variables

En partant du principe que tu n'as qu'une seule occurence du tag <testcase>, Voici une solution peut-être un peut plus élégante :

1. Constitue-toi un fichier "pattern" contenant :

<?xml version="1.0" encoding="UTF-8"?>
<testcases>
    <testcase name="<var1>">
        <summary><![CDATA[<var2>]]></summary>
        <steps><![CDATA[<var3>]]></steps>
        <expectedresults><![CDATA[<var4>]]></expectedresults>
    </testcase>
</testcases>

Ce fichier sera nommé pattern.xml par la suite.

2. Dans ton script shell, valorise tes variables var[1-4]
3. Effectue une copie de pattern.xml vers ton fichier cible xml (cible.xml)
4. Valorisation de <var[1-4]> dans le fichier cible.xml avec sed.

PATTERN=pattern.xml
CIBLE=cible.xml

var1="ce"
var2="que"
var3="tu"
var4="veux"

cp ${PATTERN} ${CIBLE}

sed -i "s/<var1>/${var1}/g;s/<var2>/${var2}/g;s/<var3>/${var3}/g;s/<var4>/${var4}/g" ${CIBLE}

Si tu as plusieurs tag <testcase> au sein du tag <testcases> alors voici le principe :
Avoir 3 fichiers pattern.

pattern_entete.xml :

<?xml version="1.0" encoding="UTF-8"?>
<testcases>

pattern_corps.xml

<testcase name="<var1>">
        <summary><![CDATA[<var2>]]></summary>
        <steps><![CDATA[<var3>]]></steps>
        <expectedresults><![CDATA[<var4>]]></expectedresults>
    </testcase>

pattern_pied.xml

</testcases>

Dans le principe, le script donne :

PATTERN_ENTETE=pattern_entete.xml
PATTERN_CORPS=pattern_corps.xml
PATTERN_PIED=pattern_pied.xml
CIBLE=cible.xml

cp ${PATTERN_ENTETE} ${CIBLE}

Pour l'ensemble des testcase faire
   var1="ce"
   var2="que"
   var3="tu"
   var4="veux"

   cat ${PATTERN_CORPS} >> ${CIBLE}
   sed -i "s/<var1>/${var1}/g;s/<var2>/${var2}/g;s/<var3>/${var3}/g;s/<var4>/${var4}/g" ${CIBLE}
fin pour

cat ${PATTERN_PIED} >> ${CIBLE}

-- Lucid Lynx --

Hors ligne

#5 Le 14/08/2008, à 09:17

P'titeScarabée

Re : shell : générer XML à partir des variables

Totor a écrit :

En partant du principe que tu n'as qu'une seule occurence du tag <testcase>, Voici une solution peut-être un peut plus élégante :

1. Constitue-toi un fichier "pattern" contenant :

<?xml version="1.0" encoding="UTF-8"?>
<testcases>
    <testcase name="<var1>">
        <summary><![CDATA[<var2>]]></summary>
        <steps><![CDATA[<var3>]]></steps>
        <expectedresults><![CDATA[<var4>]]></expectedresults>
    </testcase>
</testcases>

Ce fichier sera nommé pattern.xml par la suite.

2. Dans ton script shell, valorise tes variables var[1-4]
3. Effectue une copie de pattern.xml vers ton fichier cible xml (cible.xml)
4. Valorisation de <var[1-4]> dans le fichier cible.xml avec sed.

PATTERN=pattern.xml
CIBLE=cible.xml

var1="ce"
var2="que"
var3="tu"
var4="veux"

cp ${PATTERN} ${CIBLE}

sed -i "s/<var1>/${var1}/g;s/<var2>/${var2}/g;s/<var3>/${var3}/g;s/<var4>/${var4}/g" ${CIBLE}

Si tu as plusieurs tag <testcase> au sein du tag <testcases> alors voici le principe :
Avoir 3 fichiers pattern.

pattern_entete.xml :

<?xml version="1.0" encoding="UTF-8"?>
<testcases>

pattern_corps.xml

<testcase name="<var1>">
        <summary><![CDATA[<var2>]]></summary>
        <steps><![CDATA[<var3>]]></steps>
        <expectedresults><![CDATA[<var4>]]></expectedresults>
    </testcase>

pattern_pied.xml

</testcases>

Dans le principe, le script donne :

PATTERN_ENTETE=pattern_entete.xml
PATTERN_CORPS=pattern_corps.xml
PATTERN_PIED=pattern_pied.xml
CIBLE=cible.xml

cp ${PATTERN_ENTETE} ${CIBLE}

Pour l'ensemble des testcase faire
   var1="ce"
   var2="que"
   var3="tu"
   var4="veux"

   cat ${PATTERN_CORPS} >> ${CIBLE}
   sed -i "s/<var1>/${var1}/g;s/<var2>/${var2}/g;s/<var3>/${var3}/g;s/<var4>/${var4}/g" ${CIBLE}
fin pour

cat ${PATTERN_PIED} >> ${CIBLE}

Merci Totor !!!

Un autre problème : Avant de générer ces fichiers XML, il y a quelques caractères que je dois remplacer dans ces 4 variables, en faisant :

var=$(echo ${var}|sed 's/</\&lt;/g')
var=$(echo ${var}|sed 's/>/\&gt;/g')

Mais visiblement certaines variables ont une taille supérieure à la taille max, ce qui donne l'erreur "Output line too long". Pensez-vous qu'il faudrait passer par un fichier ? dans les 2 cas (oui ou non), pourrais-je avoir la solution ? big_smile

Je remercie jamais assez, vous êtes formidables !

#6 Le 14/08/2008, à 10:20

P'titeScarabée

Re : shell : générer XML à partir des variables

sed sur ma machine ne supporte pas option -i : illegal option

sed -i "s/<var1>/${var1}/g;s/<var2>/${var2}/g;s/<var3>/${var3}/g;s/<var4>/${var4}/g" ${CIBLE}

Qu'est ce que ca donne l'équivalent de la ligne ci-dessus svp ?

Merci big_smile big_smile

#7 Le 14/08/2008, à 10:43

Totor

Re : shell : générer XML à partir des variables

P'titeScarabée a écrit :

sed sur ma machine ne supporte pas option -i : illegal option

sed -i "s/<var1>/${var1}/g;s/<var2>/${var2}/g;s/<var3>/${var3}/g;s/<var4>/${var4}/g" ${CIBLE}

Qu'est ce que ca donne l'équivalent de la ligne ci-dessus svp ?

Merci big_smile big_smile

Ben je ne sais pas quel OS tu utilises ni la version de sed hmm donc c'est pas évident de répondre roll

mais bon, une solution générique :

CIBLE_TEMP=${CIBLE}_TMP
sed "s/<var1>/${var1}/g;s/<var2>/${var2}/g;s/<var3>/${var3}/g;s/<var4>/${var4}/g" "${CIBLE}" > "${CIBLE_TEMP}"
mv "${CIBLE_TEMP}" "${CIBLE}"

Sinon

var=$(echo ${var}|sed 's/</\&lt;/g')
var=$(echo ${var}|sed 's/>/\&gt;/g')

ça me parait étrange...:/

Dernière modification par Totor (Le 14/08/2008, à 10:51)


-- Lucid Lynx --

Hors ligne

#8 Le 14/08/2008, à 11:06

P'titeScarabée

Re : shell : générer XML à partir des variables

Totor a écrit :
P'titeScarabée a écrit :

sed sur ma machine ne supporte pas option -i : illegal option

sed -i "s/<var1>/${var1}/g;s/<var2>/${var2}/g;s/<var3>/${var3}/g;s/<var4>/${var4}/g" ${CIBLE}

Qu'est ce que ca donne l'équivalent de la ligne ci-dessus svp ?

Merci big_smile big_smile

Ben je ne sais pas quel OS tu utilises ni la version de sed hmm donc c'est pas évident de répondre roll

mais bon, une solution générique :

CIBLE_TEMP=${CIBLE}_TMP
sed "s/<var1>/${var1}/g;s/<var2>/${var2}/g;s/<var3>/${var3}/g;s/<var4>/${var4}/g" "${CIBLE}" > "${CIBLE_TEMP}"
mv "${CIBLE_TEMP}" "${CIBLE}"

Sinon

var=$(echo ${var}|sed 's/</\&lt;/g')
var=$(echo ${var}|sed 's/>/\&gt;/g')

ça me parait étrange...:/

Les 2 lignes marchent, j'ai testé.
Le souci vient du fait que quand var (chaine) est trop grande (en nombre de caractères), il a l'erreur "Output line too long". J'ai vu quelque part que c'est la commande echo qui ne supporte pas que la taille d'une ligne dépasse 1024 ou 2048 caractères...

#9 Le 14/08/2008, à 11:31

Totor

Re : shell : générer XML à partir des variables

Huuuuuuummm... si c'est le echo qui pose problème alors abandonne complètement les variables et utilises des fichiers.


-- Lucid Lynx --

Hors ligne

#10 Le 14/08/2008, à 15:01

Totor

Re : shell : générer XML à partir des variables

Je réagis seulement mais essaie en utilisant printf plutôt qu'echo.

ce qui  donne

var=$(printf "${var}"|sed 's/</\&lt;/g;s/>/\&gt;/g')


-- Lucid Lynx --

Hors ligne