my $dom = XML::LibXML->load_xml(string => <<'END_XML');
Foo
Ba
r
TEST is a ' real test.
END_XML
my $xpc = XML::LibXML::XPathContext->new($dom);
$xpc->registerNs('office',
'urn:oasis:names:tc:opendocument:xmlns:office:1.0');
$xpc->registerNs('text',
'urn:oasis:names:tc:opendocument:xmlns:text:1.0');
while (1) {
my ($lb) = $xpc->findnodes('//text:line-break') or last;
die "can't handle with children: $lb"
if $lb->hasChildNodes;
my ($a) = $xpc->findnodes('ancestor::text:*[1]',$lb)
or die "failed to find ancestor of $lb";
my ($a_a) = $xpc->findnodes('ancestor::*[1]',$a)
or die "failed to find ancestor of ancestor of $a";
my $clone_a = $a->cloneNode(0);
my $nextSibling = $lb->nextSibling();
while ( $nextSibling ) {
my $currentSibling = $nextSibling;
$nextSibling = $currentSibling->nextSibling();
$currentSibling = $a->removeChild($currentSibling);
$clone_a->addChild($currentSibling);
}
$a->removeChild($lb);
$a_a->insertAfter($clone_a,$a);
}
print $dom;