在perl中解析文件的特定部分

在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

我是perl新手,正在探索它

我有一个.xml文件,我希望得到它的几个部分。 每个部分以
开头和结尾。我想在它们之间找到内容


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(这是一个不同的问题)?