2012-04-20 15 views
0

私は次の形式を持つ2つのXML documensを持っている:あるXML文書から別のXML文書にノードをコピー/インポートできますか?

まず文書:

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

第2の文書:

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

それをコピーすることが可能であることを最初のXMLへの2番目のノード<hobby>Skating</hobby>、それが既に存在しない場合は?私は、そのノードでの変更にテキストを追加する差異のXPathとのlibxmlを見つけるために、XML :: SemanticDiffを使用しています:

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

はい、それは可能です。 ;) – JWiley

+0

@jdwilemoあなたは私にどのように表示できますか?そのノードが存在するかどうかを確認する方法がわからない – user1322582

答えて

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、私のコードに二重バグがありました。 ( 'if(()== ...)'は 'if(!(=)= ...))'だったはずです。 – ikegami

+0

xmlスキーマ構造が不明な場合はどうなりますか?この形式で、たとえば "some_string"のような属性名を使用してノードを複製したいのですか? 「some_string」を検索するXMl文書をトラバースする方法はありますか? – user1322582

+0

@ user1322582、はい、XPathsは属性を検索できます。 – ikegami

関連する問題