2013-03-09 21 views
0

我想從壓縮XML提要http://rss.slashdot.org/Slashdot/slashdot解析<title><description>。我嘗試做以下我想使用awk解析來自壓縮XML提要的文本

curl --silent "http://rss.slashdot.org/Slashdot/slashdot" | awk '/\btitle\b(.*?)\bdescription\b/' 

grep -E等,但我無法得到我想要的字符串。它總是返回整個XML,因爲它被壓縮並且數據在一行中。

我能夠通過在文本編輯器中運行它來測試我的正則表達式字符串。

感謝您的幫助!謝謝!

+2

「我想分析[...] XML [...]用awk」 - 這就是你搞砸了。 – 2013-03-09 21:51:13

+0

萬一你必須用awk來做,'但是我不能得到我想要的子串',你想要什麼? – Kent 2013-03-09 22:03:29

回答

0

這裏是一個XSLT解決方案:

curl -s -o- http://rss.slashdot.org/Slashdot/slashdot | xsltproc slashdot.xsl - 

其中slashdot.xsl

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" /> 

<xsl:variable name="newline"> 
<xsl:text> 
</xsl:text> 
</xsl:variable> 

<xsl:template match="/"> 
    <xsl:apply-templates select='//item' /> 
</xsl:template> 

<xsl:template match='//item'> 
    <xsl:value-of select='title' /><xsl:value-of select='$newline' /> 
    <xsl:text>====</xsl:text><xsl:value-of select='$newline' /> 
    <xsl:value-of select='description' /><xsl:value-of select='$newline' /> 
    <xsl:value-of select='$newline' /> 
</xsl:template> 

</xsl:stylesheet> 
+0

這工作得很好。謝謝! – 2013-03-10 00:44:45

+0

我將此設置爲正確的答案,因爲它非常易於理解,使用和更改爲我的需要。我現在在我的geektool中使用此功能,但是特別感謝Birei幫助我擺脫了第一位! – 2013-03-10 01:54:34

1

使用XML解析器將有所幫助,在這裏使用perlXML::Twig進行測試。適應您的需求。

內容script.pl

#!/usr/bin/env perl 

use warnings; 
use strict; 
use XML::Twig; 

my $twig = XML::Twig->new(
    twig_handlers => { 
     'title' => \&extract_text, 
     'description' => \&extract_text, 
    }, 
)->parsefile(shift); 

sub extract_text { 
    my ($t, $e) = @_; 
    printf qq|%s\n=================\n|, $e->tag; 
    printf qq|%s\n\n|, $e->text; 
} 

運行它想:

curl --silent "http://rss.slashdot.org/Slashdot/slashdot" | perl script.pl - 

這yiedls像每對標題和描述如下:

title 
================= 
Proof-of-Concept Port of XBMC to SDL 2.0 and Wayland 

description 
================= 
hypnosec wrote in with news that XBMC has ... 
+0

謝謝比瑞。我是Perl新手。我在運行腳本時遇到了與XMLTwig相關的問題。 – 2013-03-09 23:48:01

+0

mini:scripts balaji $ curl --silent'http://rss.slashdot.org/Slashdot/slashdot'| perl parserss.pl 在@INC中找不到XML/Twig.pm(@INC包含:/Library/Perl/5.12/darwin-thread-multi-2level/Library/Perl/5.12/Network/Library/Perl/5.12/darwin-thread-multi-2level /Network/Library/Perl/5.12/Library/Perl/Updates/5.12.4 /System/Library/Perl/5.12/darwin-thread-multi-2level/System/Library/Perl/5.12 /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level/System/Library/Perl/Extras/5.12。)在parserss.pl第3行。 BEGIN失敗 - 編譯中止parserss.pl第3行 迷你:腳本balaji $ – 2013-03-09 23:50:58

+0

您的信息,我跑cpan安裝XMLTwig – 2013-03-09 23:51:31