1

我是 Perl 的新手。我想将 xml 根标记和根结束标记读取到 perl 变量。

我尝试了这种正常的文件读取。有效。我得到拳头线和最后一行。但有时如果没有新线,你就不能相信拳头线。使用正则表达式读取第一行就完成了。

但是我用谷歌搜索了一些内置的 Perl xml 函数来完成这项工作。我没有找到任何东西,即对我来说都是新的。

请让我知道哪个图书馆最适合这个。如果可能的话,举个例子。

例如:-

<nst:root arg='1' arg2='2' arg3='3'>
   <a>1</a>
   <b>2</b>
</nst:root>

我想要2个变量,例如,

$root = '<nst:root arg='1' arg2='2' arg3='3'>';
$rootClose = '</nst:root>';

我想用其他 xml 替换这个根标签。请帮忙。

这就是我想做的。我有一个 xml 文件,它有实际的根标签。我使用XML::Twig::xml_split. 我得到很多文件,但标题不同。我想用主文件中的实际标题更新子文件

例如:-

拆分限制为 2

实际文件是,

<nst:root arg='1' arg2='2' arg3='3'>
       <a>1</a>
       <a>1</a>
       <a>1</a>
       <a>1</a>
       <a>1</a>
       <a>1</a>
</nst:root>

它将拆分为 3 个带有XML::Twig::xml_split. 插件添加自己的标题。

File1:-
<xml_split:root xmlns:xml_split="http://xmltwig.com/xml_split">
           <a>1</a>
           <a>1</a>
</xml_split:root>

File2:-
<xml_split:root xmlns:xml_split="http://xmltwig.com/xml_split">
           <a>1</a>
           <a>1</a>
</xml_split:root>

File3:-
<xml_split:root xmlns:xml_split="http://xmltwig.com/xml_split">
           <a>1</a>
           <a>1</a>
</xml_split:root>

我想要它喜欢

File1:-
<nst:root arg='1' arg2='2' arg3='3'>
           <a>1</a>
           <a>1</a>
</nst:root>

File2:-
<nst:root arg='1' arg2='2' arg3='3'>
           <a>1</a>
           <a>1</a>
</nst:root>

File3:-
<nst:root arg='1' arg2='2' arg3='3'>
           <a>1</a>
           <a>1</a>
</nst:root>
4

1 回答 1

1

我不知道如何使用xml_split程序,但在这里你有一种使用XML::Twig模块的方法,我在其中创建新元素并将每对子元素从一棵树移动到另一棵树:

#!/usr/bin/env perl

use strict;
use warnings;
use XML::Twig;
use POSIX qw<ceil>;

my ($split_limit, $n) = (2, 0); 

my $twig = XML::Twig->new->parsefile( shift );
my $root = $twig->root;

for (  1 .. ceil( $root->children_count / $split_limit ) ) { 
    my $t = XML::Twig::Elt->new( $root->tag, $root->atts );
    for ( 1 .. $split_limit ) { 
        my $children = $root->first_child;
        last unless $children;
        $children->move( last_child => $t );
    }   
    $t->print_to_file( 'xmlfile-' . $n++ . '.xml' );
}

像这样运行它:

perl script.pl xmlfile

这会为 root 的每一对孩子及其标题生成一个文件:

==> xmlfile-0.xml <==
<nst:root arg="1" arg2="2" arg3="3"><a>1</a><a>1</a></nst:root>
==> xmlfile-1.xml <==
<nst:root arg="1" arg2="2" arg3="3"><a>1</a><a>1</a></nst:root>
==> xmlfile-2.xml <==
<nst:root arg="1" arg2="2" arg3="3"><a>1</a><a>1</a></nst:root>
于 2013-11-05T10:42:40.387 回答