2012-04-20 96 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