解析XML并删除一些不需要的字符串并写入txt
问题描述:
我正在寻找一种方法来解析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://”。
答
这种情况相对比较简单,但我会在这里发布一个解决方案,这也是一个更复杂的案例。
让我们假设你想使用你的一行。
$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"
答
尝试下面的行。它将“URL:”替换为“URL:http://”
$ rssFeed.rss.channel.item | Select-Object @ {Name =“title”;表达式= {$ _。description -replace“URL:”,“URL:http://”}} -First 5
'-replace'^ URL:(。*?),。*','http: // $ 1'' –