2009-07-02 100 views
1

我有一个文本文件,数据包裹在标签之间。该标签是:获取标签之间的信息

<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).... 
+6

因此,使用XML或HTML解析器浏览它,然后摘出内容。我在这里错过了什么? – 2009-07-02 21:38:15

+1

当您在文本编辑器中查看数据时,字符串“<”存在,还是实际的“<”符号?这将使你解析数据的方式发生改变。 – poundifdef 2009-07-03 00:32:05

回答

2

你为什么要使用“&lt;”,而不仅仅是“<”?

只是将所有的“&lt;”和“&gt;”到“<”和“>”然后通过类似在Perl XML::Simple扔掉它。

1

或者使用SimpleXML PHP5 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。

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 =(); 
    } 
} 
1

您可能会喜欢看看Text::Balanced。它具有“extract_tagged”功能,可以准确解决您所概述的问题。

0

你可以使用它。您可以使用简单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 />'; 
} 
相关问题