2017-10-12 87 views
0

我正在尋找一種方法來解析PowerShell中的RSS源(XML)以獲取特定的字符串。該RSS(縮短)看起來像:解析XML並刪除一些不需要的字符串並寫入txt

<channel> 
<title>title here</title> 
<link>http://link.com</link> 
<description>this is a description</description> 
<language>en-us</language> 
<item> 
<title>title1</title> 
<description>URL: url1.com/filenamehere, IP Address: 123.123.123.123.123.123, Country: AA</description> 
</item> 
<item> 
<title>title2</title> 
<description>URL: url2.com/filenamehere, IP Address: 123.123.123.123.123.123, Country: AA</description> 
</item> 
<item> 
<title>title3</title> 
<description>URL: url2.com/filenamehere, IP Address: 123.123.123.123.123.123, Country: AA</description> 
</item> 

我下載的RSS,我能夠解析對我來說有趣的 「描述」 字段:

$rssFeed = [xml](New-Object System.Net.WebClient).DownloadString('http:/url2feed.com/rss/') 
$rssFeed.rss.channel.item | Select-Object description -First 5 

輸出是:

 
URL: url1.com/filenamehere, IP Address: 123.123.123.123.123.123, Country: AA 
URL: url2.com/filenamehere, IP Address: 123.123.123.123.123.123, Country: AA 
URL: url3.com/filenamehere, IP Address: 123.123.123.123.123.123, Country: AA 

但我只對「URL:」後面的鏈接感興趣,例如url1.com/filename。 那麼,我可以請求您的協助,以便在「description」字段的第一個逗號後面刪除開始的「URL:」和所有內容嗎?此外,我想在每個網址前添加「http://」。

+3

'-replace'^ URL:(。*?),。*','http: // $ 1'' –

回答

1

這種情況相對比較簡單,但我會在這裏發佈一個解決方案,這也是一個更復雜的案例。

讓我們假設你想使用你的一行。

$line="URL: url3.com/filenamehere, IP Address: 123.123.123.123.123.123, Country: AA" 

此行有多個分隔符,並附帶空格。但是由於它的結構相對較好,您可以通過按分隔符分割細分來輕鬆提取所需信息,而無需使用正則表達式。

例如如果在空格不規範,那麼你可以把責任推出的分隔符​​,併成爲一個裝飾功能的情況下,該URL返回值

$url=(($line -split ", ")[0] -split ": ")[1] 

。像這樣

$url=(($line -split ",")[0].Trim() -split ":")[1].Trim() 

在這兩種情況下,$url

url3.com/filenamehere 

,並請你例如,你可以使用它

$url="http://$url" 
0

嘗試下面的行。它將「URL:」替換爲「URL:http://」

$ rssFeed.rss.channel.item | Select-Object @ {Name =「title」;表達式= {$ _。description -replace「URL:」,「URL:http://」}} -First 5