私は初めてXML::Twig
です。
子タグを子タグに移動する必要があります。
これどうやってするの?
notes
親タグと子タグを一致させると、セクションの前に移動します。
私のXMLは次のようになります。
<book>
<sec>
<p>The indicated something</p>
<p>The something</p>
</sec>
<sec>
<notes>note</notes>
<p>text</p>
</sec>
<sec>
<p>The indicated</p>
<p>The something</p>
</sec>
<sec>
<notes>note</notes>
<p>text1</p>
</sec>
</book>
私は試した:
use XML::Twig;
open(my $output, ">output.xml") || die "can't open the output.xml$!\n";
my $story_file = XML::Twig->new(
keep_encoding => 1,
twig_handlers => { 'book' => \&book, },
pretty_print => 'indented',
);
$story_file->parse("sample.xml");
$story_file->print($output);
$story_file->purge;
sub book {
my ($stroy_file, $book) = @_;
my @sub_elmt = $book->children;
Get_children(\@sub_elmt) if ($#sub_elmt >= 0);
}
sub Get_children {
my ($ref) = @_;
foreach my $tagg (@$ref) {
my @children = $tagg->children;
my $tagName = $tagg->name;
if ($tagName =~ /^sec$/) {
my $f = $tagg->first_child;
if ($f->name =~ /^notes$/) {
$tagg->move('last_child', $tagg);
}
}
Get_children(\@children) if ($#children >= 0);
}
}
うまくいかない、どうすればいいの?
次のような出力が必要です。
<book>
<sec>
<p>The indicated something</p>
<p>The something</p>
<sec>
<notes>note</notes>
<p>text</p>
</sec>
</sec>
<sec>
<p>The indicated</p>
<p>The something</p>
<sec>
<notes>note</notes>
<p>text1</p>
</sec>
</sec>
</book>
どうすればいいですか?