2012-04-20 9 views
0

나는 다음과 같은 형식이 XML의 documens 있습니다하나의 XML 문서에서 다른 노드로 노드를 복사/가져올 수 있습니까?

첫 번째 문서 :

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

두 번째 문서 :

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

가 복사하는 것이 가능하다는 것을 처음 XML로 두 번째 노드 <hobby>Skating</hobby>, 이미 존재하지 않는다면? 그 노드의 변경 사항에 텍스트를 추가하는 차이의 XPath를 찾기 위해 XML :: SemanticDiff을 사용하고 LibXML 오전 :

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

관련 문제