2017-10-12 96 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