1

我正在尝试解析从外部源获取的 XML 文件,但由于文本节点中存在未编码的 XML 实体而遇到问题。

本质上,我问的是与this相同的问题,但针对的是 Perl 而不是 PHP。

<report>  
  <company>A & W</company>  
  <company>Some Other Company with a < in Inc.</company>
</report>  

我尝试使用这样的东西:

my $readAllRecordsURI = "http://mycompany.com/CompanyOnline/GetRecord";
my @form_array = ("action" => "readAll", "table" => "QOPIDINF");

my $ua = LWP::UserAgent->new;

my $cics_request = (POST $readAllRecordsURI, \@form_array);          
my $cics_response = $ua->request($cics_request);
my $xmlfile = $cics_response->content;

my $parser = XML::Parser->new( Handlers => {Char  => \&handle_char});
$parser->parsefile( $xmlfile );


sub handle_char {
   my ($p, $string) = @_;

   #clean up text here...
}
4

3 回答 3

1

这真的不是答案,但它解决了我的问题。我所做的是回到提供 XML 的程序员那里,并要求他正确地对文本进行编码以避免这一切。

于 2010-04-28T14:35:27.357 回答
0

看看XML::Liberal。它似乎只是做你想做的事。一个非常简单的例子(来自一个单元测试):

my $clean_xml = XML::Liberal->new('LibXML')->parse_string($bad_xml)->to_string()
于 2010-04-27T20:40:18.253 回答
0

XML::Parser / Expat 一直对我很有效,包括格式不佳的 XML。

请勿使用正则表达式解析 XML .... 除非您的解析器无法<正常工作 >;-} ...您可以在解析之前删除带有 a 的公司名称吗?

以下是一些可以尝试的正则表达式:XML Shallow Parsing with regex -- 在该页面的底部,我认为有一个正则表达式只能找到正确的 XML 标记;反转它以发现形状不良?

于 2010-04-27T20:04:54.703 回答