copier un ensemble de sous noeud sous un noeud

a marqué ce sujet comme résolu.

Bonjour à tous,

Je cherche une solution à mon problème et vous pouvez surement m'aider :)

J'ai un fichier XML dont voici la structure:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<config>
    <type name="obj1 name">
        <attribute name="attr1 name">attr1 name</attribute>
        <attribute name="attr2 name">attr2 name</attribute> 
    </type>
    <type name="obj2 name">
        <attribute name="attr1 name">attr1 name</attribute>
        <attribute name="attr2 name">attr2 name</attribute> 
    </type>
    <params>
        <attribute name="param1 name">
                <value name="val1 name"/>
                <value name="val2 name"/>
        </attribute>
        <attribute name="param2 name">
                <value name="val1 name"/>
                <value name="val2 name"/>
        </attribute>
    <params>
</config>

Je souhaiterai copier l'ensemble des balises <params> (donc tout les enfants + sous enfant de params)
Existe t'il un moyen simple et rapide plutôt que de lire mon fichier ligne à ligne et copier ?

+0 -0

Bonjour et merci à vous 2, je vais regardé ça de plus près même si jusqu'alors j'utilisais plutôt minidom pour gérer mes fichiers XML Je peux surement mixer un peu les solutions :)

PS: désolé pour le XML, j'avais pourtant essayé de m'appliquer :$

+0 -0

La méthode dégueulasse à base regex (avec awk, sed, perl, pyped, etc.) peut marcher pour l’exemple présenté. Mais évidement la bonne approche est de parser le fichier, c’est le fond de ce que propose Fred et Kje.

Je ne résiste pas à montrer un example avec pyped, mais ce genre de chose est à proscrire si on veut quelque chose d’un minimum sérieux.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$pyp --full -p "re.search(r'<params>(.*)</params>', stdin, re.DOTALL).group(1)" <trux.xml

        <attribute name="param1 name">
                <value name="val1 name"/>
                <value name="val2 name"/>
        </attribute>
        <attribute name="param2 name">
                <value name="val1 name"/>
                <value name="val2 name"/>
        </attribute>

(j’ai bien refermé la balise <params> du fichier que tu as donné pour le test).

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte