在perl中解析文件的特定部分
我是perl新手,正在探索它 我有一个.xml文件,我希望得到它的几个部分。 每个部分以在perl中解析文件的特定部分,perl,Perl,我是perl新手,正在探索它 我有一个.xml文件,我希望得到它的几个部分。 每个部分以开头和结尾。我想在它们之间找到内容 20 0 8. 21 0 8. 和输出,我期待如下 20 0 8. 21 0 8. 我将如何提取文件的这一部分 非常感谢您的帮助。您可以通过阅读文本来解决此问题,但使用XML解析器总是更安全的。CPAN中有许多优秀的Perl XML库可用。我喜欢的是XML::LibXML(请参阅),它是libxml2的接口。它提供了很多可能性。使用XML::LibXML::XPath
开头和结尾。我想在它们之间找到内容
20
0
8.
21
0
8.
和输出,我期待如下
20
0
8.
21
0
8.
我将如何提取文件的这一部分
非常感谢您的帮助。您可以通过阅读文本来解决此问题,但使用XML解析器总是更安全的。CPAN中有许多优秀的Perl XML库可用。我喜欢的是
XML::LibXML
(请参阅),它是libxml2
的接口。它提供了很多可能性。使用XML::LibXML::XPathContext
的功能,我们可以:
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my $parser = XML::LibXML->new( recover => 1 );
my $xp = $parser->parse_string(<<'EndXML');
<document>
<field>
<address>20</address>
<startat>0</startat>
<size>8</size>
</field>
<field>
<address>21</address>
<startat>0</startat>
<size>8</size>
</field>
</document>
EndXML
if( $@ ) {
die "Cannot parse XML\n";
}
foreach my $c ( $xp->findnodes('//field') ) {
print $c->findnodes('.'), "\n";
}
#/usr/bin/perl
严格使用;
使用警告;
使用XML::LibXML;
my$parser=XML::LibXML->new(recover=>1);
我的$xp=$parser->parse_string(您可以通过阅读文本来解决这个问题,但是使用XML解析器总是比较安全的。CPAN中有许多优秀的Perl XML库。我喜欢的一个库是XML::LibXML
(请参阅)它是到libxml2
的接口。它提供了许多可能性。使用XML::LibXML::XPathContext
的功能,我们可以:
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my $parser = XML::LibXML->new( recover => 1 );
my $xp = $parser->parse_string(<<'EndXML');
<document>
<field>
<address>20</address>
<startat>0</startat>
<size>8</size>
</field>
<field>
<address>21</address>
<startat>0</startat>
<size>8</size>
</field>
</document>
EndXML
if( $@ ) {
die "Cannot parse XML\n";
}
foreach my $c ( $xp->findnodes('//field') ) {
print $c->findnodes('.'), "\n";
}
!/usr/bin/perl
严格使用;
使用警告;
使用XML::LibXML;
my$parser=XML::LibXML->new(recover=>1);
我的$xp=$parser->parse_字符串(因此,您只想删除包含
的行吗?请注意,您显示的不是有效的XML,因为没有关闭
。是的,我只想删除包含此内容的行,这听起来像是一个错误。您想在这里实现什么?您的源XML实际上不是XML。这是一个转录错误,还是您收到了broken要处理的XML(这是另一个问题)?所以您只想删除包含
的行吗?请注意,您显示的不是有效的XML,因为没有关闭
。是的,我只想删除包含此内容的行,对我来说听起来像是一个错误。您想在这里实现什么?您的源XML实际上不是XML。这是一个转录错误,还是您收到了bro如何处理XML(这是一个不同的问题)?