在标签之间抓取信息

时间:2009-07-02 21:35:03

标签: php mysql html perl text-files

我有一个包含标签之间数据的文本文件。标签是:

<title>
<url>
<pubDate>

因此,条目如下所示:

<title>title 1</title>
<url>url 1</url> 
<pubDate>pubDate 1</pubDate>

<title>title 2</title>
<url>url 2</url> 
<pubDate>pubDate 2</pubDate>

<title>title 3</title>
<url>url 3</url> 
<pubDate>pubDate 3</pubDate>

我需要一个脚本来读取此文本文件并准备要插入数据库的每个项目。查询将如下所示:

insert into table (title,url,pubdate) values ($title,$url,$pubdate).... 

5 个答案:

答案 0 :(得分:2)

为什么使用“&lt;”而不只是“<”?

只需将所有“&lt;”和“&gt;”转换为“<”和“>”,然后将其转换为XML::Simple之类的内容在Perl。

答案 1 :(得分:1)

PHP5中的SimpleXML http://php.net/simplexml

@rascher将XML实体转换为“XML文字”应该没有任何问题。

&lt; title &gt; C &gt; Java &lt; /title &gt;

将编码为:

&lt; title &amp;gt; C &gt; Java &lt; /title &gt;

解码XML实体会产生有效的XML。

答案 2 :(得分:1)

#!/usr/bin/perl

use strict;
use warnings;

my %seen = (); 

sub seen_all {     
      defined $seen{title}
   && defined $seen{url} 
   && defined $seen{pubDate};
}  

while (<>) {                   
     /<(.+?)>(.+)<\/\1>/ && do {
         $seen{$1} = $2;
     }; 

    if(seen_all){ 
        print "insert into table (title,url,pubdate) " .        
              "values ('$seen{title}','$seen{url}','$seen{pubDate}')\n";
        %seen = (); 
    } 
}   

答案 3 :(得分:1)

您可能希望看一下Text::Balanced。它有一个“extract_tagged”函数,可以完全解决您所概述的问题。

答案 4 :(得分:0)

你可以用它。您可以使用Simple XML类

阅读RSS
$data = file_get_contents('http://www.example.com/path-to-feed.xml');
$xml = new SimpleXMLElement($data);

foreach($xml->feed as $feed){
    echo $feed->title;
    echo '<br />';
    echo $feed->url;
    echo '<br />';
    echo $feed->pubDate;
    echo '<br />';
}