2017-10-12 11 views
0

Je cherche un moyen d'analyser un flux rss (XML) dans PowerShell pour une chaîne spécifique. Le RSS (raccourci) ressemble à:Parse XML et supprimer certaines chaînes inutiles et écrire en 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> 

Je télécharge le RSS et je suis capable d'analyser le pour moi champ "Description" intéressante:

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

sortie est:

 
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 

Mais le lien qui suit "URL:" m'intéresse justement, par exemple url1.com/filename. Alors, est-ce que je peux demander votre aide s'il vous plaît pour abandonner le début "URL:" et tout après la première virgule dans le champ "description"? En outre, j'aimerais ajouter "http: //" avant chaque URL.

+3

'-replace '^ URL: (. *?),. *', 'Http: // $ 1'' –

Répondre

1

Ce cas est relativement simple, mais je vais poster une solution ici aussi comme une idée pour les cas plus complexes. Supposons que vous vouliez travailler avec l'une de vos lignes.

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

Cette ligne a plusieurs délimiteurs avec des espaces attachés. Mais parce qu'il est relativement bien structuré, vous pouvez facilement extraire l'information que vous voulez sans expression régulière en la décomposant en segments par délimiteur.

Par exemple, cela renvoie la valeur url

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

S'il y a un cas où les espaces blancs ne sont pas canoniques, vous pouvez pousser la responsabilité de la delimiter et en fonction de garniture. Comme cette

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

Dans les deux cas, le $url sera

url3.com/filenamehere 

et vous pouvez l'utiliser comme bon vous semble par exemple

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

Essayez la ligne ci-dessous. qui remplace "URL:" par "URL: http: //"

$ rssFeed.rss.channel.item | Select-Object @ {Name = "titre"; Expression = {$ _. Description -replace "URL:", "URL: http: //"}} -Première 5