2012-04-20 113 views
0

我有以下格式兩個XML documens:您是否可以將節點從一個XML文檔複製/導入到另一個XML文檔?

頭文件:

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

第二份文件:

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

是否可以複製第二個節點<hobby>Skating</hobby>到第一個XML,如果它不存在?我使用XML :: SemanticDiff的找到的差異XPath和的libxml將文本追加到該節點所做的更改:

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

是的,這是可能的。 ;) – JWiley 2012-04-20 18:39:49

+0

@jdwilemo你能告訴我怎麼做?不知道如何檢查該節點是否存在 – user1322582 2012-04-20 18:59:40

回答

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 2012-04-20 20:15:54

+0

如果xml模式結構未知,該怎麼辦?我想用這種格式的屬性名稱來克隆一個節點,例如「some_string」? 有沒有辦法遍歷尋找「some_string」的XMl文檔? – user1322582 2012-04-23 14:06:05

+0

@ user1322582,是的,XPath可以查找屬性。 – ikegami 2012-04-23 14:47:48

相關問題