2009-07-02 97 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 />'; 
} 
相關問題