extraction des parties d'un fichier xml

extraction des parties d'un fichier xml - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 16-05-2011 à 15:33:14    

Bonjour,
 
Je veux créer un script shell qui permet d'extraire des parties d'un fichier xml (définies par les noms des balises) et les mettre dans un autre fichier xml comme output.
 
Merci pour votre aide.

Reply

Marsh Posté le 16-05-2011 à 15:33:14   

Reply

Marsh Posté le 16-05-2011 à 16:03:30    

j'ajoute une autre clarification. je cherche des informations entre des balises ouvrantes er fermantes bien déterminée.

Reply

Marsh Posté le 16-05-2011 à 16:13:46    

je vais extraire des lignes xml entre deux commentaires bien déterminées.

Reply

Marsh Posté le 16-05-2011 à 16:59:30    

cat, grep, sed, awk.
Voilà tes outils.


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
Reply

Marsh Posté le 16-05-2011 à 17:08:11    

Fork Bomb a écrit :

cat, grep, sed, awk.
Voilà tes outils.


Je pense qu'il existe des outils plus dédiés pour exploiter facilement de l'XML (ce qui est un peu le but de l'XML)

 

sinon une rapide recherche :
http://www.unix.com/shell-programm [...] block.html


Message édité par o'gure le 16-05-2011 à 17:09:16
Reply

Marsh Posté le 16-05-2011 à 17:23:41    

je n'ai pas compris comment spécifier le block avec awk.
en fait g essayé avec awk mail il me retourne juste la ligne qui contient le motif de recherche.
Je veux extraire tout un block.

Reply

Marsh Posté le 17-05-2011 à 13:46:07    

Pourquoi pas avec une simple transformation xsl ?

Reply

Marsh Posté le 17-05-2011 à 15:37:27    

merci.
comment pourrais je utiliser une simple transformation xsl.

Reply

Marsh Posté le 17-05-2011 à 15:50:56    

Suppose que tu aies ce fichier xml:
<?xml version="1.0"?>
<toto>
 <titi>
  <tutu>valeur</tutu>
 </titi>
</toto>
 
Tu écris cette transformation par exemple:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format"
                               xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
 <xsl:template match="/toto/titi/tutu">
  <xsl:copy>
   <xsl:apply-templates />
  </xsl:copy>
 </xsl:template>
</xsl:stylesheet>
 
Que tu appliques par:
xsltproc fichier.xsl fichier.xml
 
 

Reply

Marsh Posté le 17-05-2011 à 16:16:52    

merci beaucoup de votre aide.  
JE n'arrive pas à résoudre cet étape dans mon travail. En fait je n'ai pas des balises qui s'ouvrent et se ferment. Je vais faire cet étape manuellement.
J'ai besoin d'aide sur la deuxième étape:
1. Supposons que j'ai eu les parties de xml dont j'ai besoin dan un autre fichier.
2. Je veux parcourir ce ficher et extraire des champs spécifiques. Si ce champ existe dans un autre fichier xml (que j'ai) => J'indique true
Si le champs existe dans ce fichier et n'existe pas dans l'autres=> J'indique nouveau.
Any help please

Reply

Marsh Posté le 17-05-2011 à 16:16:52   

Reply

Marsh Posté le 19-05-2011 à 10:58:53    

bonjour,
 
je veux créer un script shell qui prend en input une lsite de mots et cherchent s'il existe dans un fichier xml.
 
merci beaucoup pour votre iade.
 

Reply

Marsh Posté le 19-05-2011 à 11:02:32    

Reply

Marsh Posté le 19-05-2011 à 13:05:15    


j'ai crée un script qui prend en entrée le nom du fichier xml, la liste des mot à chercher. Il doit me retourner si chaque mot existe dnas le script xml et dans quelle ligne.
Voici ma version.
Je suis débutante et j'ai besoin de votre aide:
 

Code :
  1. #!/bin/bash
  2. read -p 'Quel est votre fichier XML ? ' file
  3. read -p 'Quel est votre liste ? ' liste
  4. count=$#
  5. for [ int i=1;i <= $count;i++ ]
  6. do
  7. if [ grep -io "$i" "$file" ]; then
  8. ligne = wc -l
  9. echo "$i is present à la ligne $ligne"
  10. else
  11.    echo "Je n'ai pas pu trouver ce mot"
  12. fi
  13. done


 
 
merci beaucoup pour votre aide.

Reply

Marsh Posté le 19-05-2011 à 13:24:04    

je pense que tu n'as pas bien saisi l'utilité de la commande wc et si tu veux récupérer les lignes où sont présents tes mots il va te falloir traiter la sortie de grep à coup de awk (et relire le man de grep pour trouver comment afficher les numéros de ligne)

Reply

Marsh Posté le 19-05-2011 à 14:25:41    

o'gure a écrit :

je pense que tu n'as pas bien saisi l'utilité de la commande wc et si tu veux récupérer les lignes où sont présents tes mots il va te falloir traiter la sortie de grep à coup de awk (et relire le man de grep pour trouver comment afficher les numéros de ligne)


 Vous avez tout à fait raison.
 
Je dois utiliser awk.
Voici un exemple de output par grep directement pour déterminer le nombre de ligne.
20:    <capability name="bmp" value="true"/>
j'ai modifié ma commande comme suit pour avoir ce résultat:

Code :
  1. grep -n "$i" "$file"


maintenant je dois utiliser le awk pour extraire juste le motif nombre de ligne. J'ai fait comme suit:

Code :
  1. grep -n "$i" "$file" | awk -F ":" '{ print $0}'


 
mais ça n'a pas marché. Comment dois je la modifier.
 
Merci beaucoup.

Reply

Marsh Posté le 19-05-2011 à 14:40:54    

ensienne a écrit :


 Vous avez tout à fait raison.
 
Je dois utiliser awk.
Voici un exemple de output par grep directement pour déterminer le nombre de ligne.
20:    <capability name="bmp" value="true"/>
j'ai modifié ma commande comme suit pour avoir ce résultat:

Code :
  1. grep -n "$i" "$file"


maintenant je dois utiliser le awk pour extraire juste le motif nombre de ligne. J'ai fait comme suit:

Code :
  1. grep -n "$i" "$file" | awk -F ":" '{ print $0}'


 
mais ça n'a pas marché. Comment dois je la modifier.
 
Merci beaucoup.


 J'arrive à le modifier pour extraire le nombre de ligne. Voici la versin modifiée:

Code :
  1. #!/bin/bash
  2. file=$1
  3. liste=$*
  4. count=$#
  5. i=1
  6. for i in $*
  7. do
  8. echo $i
  9. occurence=$(grep -n "$i" "$file" | awk -F ":" '{ print $1}')
  10. echo $occurence
  11. if [ "$occurence" -gt 0 ]; then
  12.    echo "The format $i is present at ligne $occurence"
  13. else
  14.    echo "The format $i is not detected at the file $file"
  15. fi
  16. done


 
Mais il ne fonctionne pas comme il faut.
En fait il commence le parcours à partir de nom de script et le nom de fichier xml donné en paramètre. Je veux éliminer ses deux cas.Je veux qu'il commence son parcours à partir de paramètre 2. (enlever le nom du script et le nom du fichier xml donné en entrée).
En plus je veux avoir un affichage comme suit:
format1: lig1 lign2
avec fomat1 est le motif donné dans la liste d'entrée et lig1, lign2 les numéros de ligne ou est détecté ce motif dans le fichier xml.
 
Merci beaucoup pour votre aide.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed