2009-07-02 40 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パーサでそれを歩き、コンテンツを引き抜きます。私はここで何が欠けていますか? –

+1

テキストエディタなどでデータを見ると、文字列 "<"、または実際の "<"記号がありますか?これにより、データを解析する方法の世界が変わります。 – poundifdef

+0

@dsm - あなたは彼のデータが本当に彼がそれをタイプしたように見ていないと確信していますか? – Telemachus

答えて

2

は、なぜあなたは「&lt;」とだけではなく、「<」を使用していますか?

ちょうど「<」と「>」から「&lt;」と「&gt;」のすべてを変換し、その後PerlでXML::Simpleのようなものを通してそれを投げます。 PHP5 http://php.net/simplexml

+0

です。もう少し複雑になるかもしれません。もしデータが " C > Java"でなければならないのですが、 "&ltタイトル&gt; C > Java&lt/title&gt"真ん中の '&gt'を間違って置き換えます。 – poundifdef

1

あるいは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

これを使用できます。 RSSをシンプルなXMLクラスで読むことができます

$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 />'; 
} 
関連する問題