Разобрать ATOM RSS-канал и удалить html теги - PullRequest
0 голосов
/ 11 апреля 2020

я занимаюсь разработкой этого кода с помощью powershell. Мне нужно иметь возможность извлечь теги html.

  Invoke-WebRequest -Uri 'https://psu.box.com/shared/static/jf36ohodxnw7oemghsau1t7qb0w4y708.rss' -  OutFile C:\users\anr2809\Documents\alerts.txt
  [xml]$Content = Get-Content C:\users\anr2809\Documents\alerts.txt -Raw
  $Regex = '(?s)SE1046.*?Description := "(?<Description>.*?)"'

 If ($Content -match $Regex) {
      "Description is '$($Matches['Description'])'"
      # do something here with $Matches['Description']
    }
 Else {
    "No match."
      }
   $Feed = $Content.rss.channel
 ForEach ($msg in $Feed.Item){
     $ParseData = (($msg.description))
    ForEach ($Datum in $ParseData){
     If ($Datum -like "Title"){[int]$Upvote = ($Datum).split(' ') | Select-Object -First 1}#EndIf
     If ($Datum -like "comments"){[int]$Downvote = ($Datum).split(' ') | Select-Object -First 1}    #EndIf
    }#EndForEach
     [PSCustomObject]@{
     'LastUpdated' = [datetime]$msg.pubDate
     'Title' = $msg.title
     'Category' = $msg.category
     'Author' = $msg.author
     'Link' = $msg.link
     'UpVotes' = $Upvote
     'DownVotes' = $Downvote
     'Validations' = $Validation
     'WorkArounds' = $Workaround
     'Comments' = $msg.description.InnerText                   
     'FeedbackID' = $FeedBackID
    }#EndPSCustomObject
   }

Это результаты, и я хотел бы удалить теги html.

LastUpdated : 3/30/2020 9:45:52 AM
Title       : Enterprise Network Planned Outage
Category    : 
Author      : 
Link        : link
UpVotes     : 
DownVotes   : 
Validations : 
WorkArounds : 
Comments    : 
                    <p><strong>People and Locations Impacted:</strong><br />All    students, faculty, and staff at all State locations<br /><br />
FeedbackID  : 

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Вы должны быть в состоянии использовать следующий скрипт. Используется объект HTMLFile com.

  Invoke-WebRequest -Uri 'https://*.rss' -  OutFile C:\*.rss
  [xml]$Content = Get-Content C:\*.rss -Raw
  $Regex = '(?s)SE1046.*?Description := "(?<Description>.*?)"'

 If ($Content -match $Regex) {
      "Description is '$($Matches['Description'])'"
      # do something here with $Matches['Description']
    }
 Else {
    "No match."
      }
   $Feed = $Content.rss.channel
 ForEach ($msg in $Feed.Item){


     $ParseData = $msg.description
    ForEach ($Datum in $ParseData){
     If ($Datum -like "Title"){[int]$Upvote = ($Datum).split(' ') | Select-Object -First 1}#EndIf
     If ($Datum -like "comments"){[int]$Downvote = ($Datum).split(' ') | Select-Object -First 1}    #EndIf
    }#EndForEach     

    $HTML = New-Object -ComObject "HTMLFile"
    $HTML.IHTMLDocument2_write($ParseData.InnerText)

     [PSCustomObject]@{
     'LastUpdated' = [datetime]$msg.pubDate
     'Title' = $msg.title
     'Category' = $msg.category
     'Author' = $msg.author
     'Link' = $msg.link
     'UpVotes' = $Upvote
     'DownVotes' = $Downvote
     'Validations' = $Validation
     'WorkArounds' = $Workaround
     'Comments' = $HTML.all.tags("p") | % InnerText           
     'FeedbackID' = $FeedBackID
    }#EndPSCustomObject
   }
0 голосов
/ 11 апреля 2020

Вы можете заменить <br/> фактическими переносами строк, а затем полностью пометить все остальное:

$commentsPlain = $msg.description.InnerText -replace '<br ?/?>',[System.Environment]::NewLine -replace '<[^>]+>'

[PSCustomObject]@{
    'LastUpdated' = [datetime]$msg.pubDate
    'Title' = $msg.title
    'Category' = $msg.category
    'Author' = $msg.author
    'Link' = $msg.link
    'UpVotes' = $Upvote
    'DownVotes' = $Downvote
    'Validations' = $Validation
    'WorkArounds' = $Workaround
    'Comments' = $commentsPlain
    'FeedbackID' = $FeedBackID
}
...