【问题标题】:Grab info between tags在标签之间获取信息
【发布时间】:2009-07-22 23:49:03
【问题描述】:

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

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

【问题讨论】:

  • 所以使用 XML 或 HTML 解析器遍历它,然后提取内容。我在这里错过了什么?
  • 当您在文本编辑器或其他工具中查看数据时,字符串“<”是存在,还是实际的“
  • @dsm - 你确定他的数据实际上看起来不像他输入的样子吗?
  • @Telemachus - 看起来太像一个错误......也许作者可以澄清一下(@Sunny Rockzzs - 意见?)
  • 实际上在记事本上看到的数据对应于 <但正如在 XML 编辑器上看到的那样,Notepad++ 对应于 dsm 的上述编辑版本

标签: php mysql html perl text-files


【解决方案1】:

您为什么使用“&amp;lt;”而不仅仅是“&amp;lt;”?

只需将所有 '&amp;lt;' 和 '&amp;gt;' 转换为 '&amp;lt;' 和 '&gt;' 然后在 Perl 中通过 XML::Simple 之类的东西来传递。

【讨论】:

  • 可能有点复杂:如果数据应该是 "C > Java" 但在他的数据中显示为 "&lt title &gt C &gt ; Java &lt /title &gt" ?它会错误地替换中间的“&gt”。
【解决方案2】:

或 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。

【讨论】:

    【解决方案3】:
    #!/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 = (); 
        } 
    }   
    

    【讨论】:

      【解决方案4】:

      您可能想查看Text::Balanced。它有一个“extract_tagged”功能,可以完全解决您所概述的问题。

      【讨论】:

        【解决方案5】:

        你可以用这个。您可以使用 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 />';
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-22
          • 1970-01-01
          相关资源
          最近更新 更多