#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
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
#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
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
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
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/</\</g')
var=$(echo ${var}|sed 's/>/\>/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 ?
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
#7 Le 14/08/2008, à 10:43
- Totor
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
Ben je ne sais pas quel OS tu utilises ni la version de sed donc c'est pas évident de répondre
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/</\</g')
var=$(echo ${var}|sed 's/>/\>/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
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
Ben je ne sais pas quel OS tu utilises ni la version de sed donc c'est pas évident de répondre
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/</\</g') var=$(echo ${var}|sed 's/>/\>/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/</\</g;s/>/\>/g')
-- Lucid Lynx --
Hors ligne