什么是检测XML最佩尔利方式(使用XML ::的libxml/libxml2的)或纯文本输入用Perl(5.18或更高版本)?自动检测XML或纯文本输入与文件和标准输入用Perl
我有一个程序,可以接受纯文本输入或XML输入和XML输入可以是任意编码。输入来自文件(ARGV)或STDIN。当只有纯文本被认为是,下面的代码就足够了:
local $/ = undef;
my $text = <> || die;
这将让整个输入文件或标准输入文本,使用默认的编码设置。
当只有XML考虑,下面的代码是可用的(对于文件):
my $parser = XML::LibXML->new();
my $xml = $parser->load_xml(location => $ARGV[0]);
但是,什么是将两者结合起来的最佳方式?我希望libxml2在输入中首先进行破解,如果失败则返回纯文本。如果我直接传递IO => * STDIN,libxml2的将消耗的输入端,该程序将在后面需要的libxml2如果确定该输入不是XML。
(注意:如果libxml2的确定输入某种XML的,但在某些方面存在格式错误,那么程序应该改为终止回落的。)
http://search.cpan.org/~fitzner/File-LibMagic-0.96/LibMagic.pm – xxfelixxx
如何知道包含' '的文件是XML文件还是纯文本文件?它可能是两个。 –
nwellnhof
nwellnhof,这是一个很好的观点。我的回答是,您设计的代码以这种或那种方式回答问题。特别是:'' 是一个XML文件,因为XML没有下手'':您可以直接进入的第一个元素。您也可以将字节顺序标记作为第一个字符。更一般的观点是,我想_libxml2采取第一裂纹在输入,然后回落到纯文本如果(libxml2的解析)fails_。根据一些测试,libxml2还会接受根元素前后的空白。 –