2012-04-20 3 views
0

J'ai deux XML documens avec le format suivant:Pouvez-vous copier/importer un noeud d'un document XML à un autre?

Premier document:

<person> 
    <name>David</name> 
</person> 

Deuxième document:

<person> 
    <name>David</name> 
    <hobby>Skating</hobby> 
</person> 

Est-il possible de copier ce second noeud <hobby>Skating</hobby> dans le premier XML, si ça n'existe pas déjà? J'utilise XML :: SemanticDiff pour trouver le XPath des différences et LibXML pour ajouter du texte aux modifications apportées à ce nœud:

for my $node ($root->findnodes($path_change)) { 
    $root->removeChildNodes(); 
    $node->appendText("This is a test"); 
} 
+0

Oui, il est possible. ;) – JWiley

+0

@jdwilemo Pouvez-vous me montrer comment? Je ne sais pas comment vérifier si ce noeud existe – user1322582

Répondre

2
my ($dst_person) = $dst_root->findnodes('//person'); 
my ($dst_hobby) = $dst_person->findnodes('hobby'); 
if (!$dst_hobby) { 
    my ($src_hobby) = $src_root->findnodes('//person/hobby'); 
    $dst_person->appendChild($src_hobby->clone(1)); 
} 
+0

@ user1322582, Il y avait un double-bug dans mon code. ('if (() == ...)' aurait du être 'if (! (() = ...))'.) Corrigé en utilisant quelque chose de plus lisible. – ikegami

+0

Que faire si la structure du schéma xml est inconnue? et je veux cloner un noeud en utilisant le nom d'attribut par exemple "some_string" dans ce format? Existe-t-il un moyen de parcourir un document XMl à la recherche de "some_string"? – user1322582

+0

@ user1322582, Oui, XPaths peut rechercher des attributs. – ikegami

Questions connexes