Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell不显示rss源_Powershell_Rss - Fatal编程技术网

Powershell不显示rss源

Powershell不显示rss源,powershell,rss,Powershell,Rss,我正在尝试使用powershell解析RSS提要,但是当我使用Invoke RestMethod时,这是我得到的唯一输出: xml RDF --- --- version="1.0" encoding="UTF-8" RDF 我曾经遇到过多个rss源的问题,在这些rss源中没有显示任何内容,我如何让它工作,以便在使用Invoke-rest方法时实际显示rss源 $url = 'http:/

我正在尝试使用powershell解析RSS提要,但是当我使用Invoke RestMethod时,这是我得到的唯一输出:

xml                           RDF
---                            ---
version="1.0" encoding="UTF-8" RDF
我曾经遇到过多个rss源的问题,在这些rss源中没有显示任何内容,我如何让它工作,以便在使用Invoke-rest方法时实际显示rss源

$url = 'http://www.aero-news.net/news/rssfeed.xml'
Invoke-RestMethod -Uri $url 

谢谢。

调用WebRequest将RSS提要数据解析为xml。您可以像访问普通对象一样访问数据。演示:

$feed = [xml]( invoke-webrequest "https://arminreiter.com/feed/" )
$feed.rss.channel.item | Select-Object @{Name="Id";Expression={$_."post-id".InnerText}}, title, link, pubDate

您得到的输出意味着
调用RestMethod
按预期工作:它返回了一个
[xml]
()实例,该实例是从站点返回的xml文本的xml DOM(文档对象模型)

不幸的是,如您的问题所示,
[xml]
实例的默认显示格式没有多大帮助[1],但所有信息都在那里
,您只需访问
.OuterXml
属性即可验证:

# Get the XML DOM object parsed from the website's XML text output.
$xml = Invoke-RestMethod 'http://www.aero-news.net/news/rssfeed.xml'
# Output its text representation.
$xml.OuterXml
上面打印的字符串如下所示:

<?xml version="1.0" encoding="iso-8859-1"?>

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns="http://purl.org/rss/1.0/">

<channel rdf:about="http://www.aero-news.net">
<title>Aero-News Network</title>
<description>Daily, Real-Time news and information critical to aviation and aerospace personnel the world over. Aero-News provides daily newsletter summaries, RSS feeds, and numerous personal and professional syndication and news distribution options to insure that aviators, the world over, are kept up to date on information of critical concern.</description>
<link>http://www.aero-news.net</link>

...
上面的代码生成以下字符串:


深部
请注意,不包括XML声明,但您可以自己轻松地预先编写它:

$xd = [System.Xml.Linq.XDocument] $xml.OuterXml
$xd.Declaration.ToString() + "`n" + $xd.ToString()
以下
格式Xml
便利功能
包装了此功能:

function Format-Xml {

  param(
   [Parameter(ValueFromPipeline)]
   [xml] $Xml
  )

  process {
    $xd = [System.Xml.Linq.XDocument] $Xml.OuterXml
    if ($xd.Declaration) {
      $str = $xd.ToString()
      $newline = ("`n", "`r`n")[$str.Contains("`r`n")]
      $xd.Declaration.ToString() + $newline + $str
    }
    else {
      $xd.ToString()
    }
  }

}
现在,您可以使用以下命令漂亮地打印原始的
$xml
变量(通过
调用RestMethod
获得):


[1] 显示的是文档XML声明的内容,即property
.XML
,以及文档(root)元素的名称,即为其自身命名的属性。打印文档中的任何给定元素的工作方式如下:如果元素既没有属性也没有子元素,则打印其文本内容(文本子节点)(如果有)。否则,将打印其属性及其值,然后是为子元素命名的属性,如果它们本身具有属性和/或子元素,则每个属性也由其名称表示为属性值,否则由其文本内容(如果有)表示

[2] 一个示例命令,用于处理标题包含给定单词的所有提要项,并将其转换为自定义对象

$userTerm = 'Quote'
$xml.RDF.Item | ? Title -like "*$userTerm*" | % { 
  [PSCustomObject]@{ 
    Source = "aero"
    Title = $_.Title 
    Link = $_.Link
    Description = $_.description 
  }
}

谢谢,但是这不适用于我尝试使用的rss源,我仍然没有得到任何输出。这只是一种您必须用于自己的rss源读取xml的技术。返回解析xml的是
调用RestMethod
,而不是
调用WebRequest
(一个给定XML源的
XmlDocument
实例);
Invoke WebRequest
返回一个响应对象,该对象的
.Content
属性将XML作为文本包含,然后您必须自己解析它,这就是您的
[XML]
cast确实有效;这只是因为响应对象作为一个整体字符串化为其
.Content
属性的值。总的来说,@Dave自己的
Invoke RestMethod
方法更简单、更有效,并且工作得很好,但从默认显示格式来看这并不明显。是的。调用webrequeest并不总是将内容解析为XML。我发现大多数情况下,它将源代码解析为html。
Invoke WebRequest
从不将内容解析为XML;它在
.content
中返回站点返回的文本内容(无论其格式如何),并且仅在Windows PowerShell中,它通过
.ParsedHtml
属性解析html(在PowerShell[Core]6+中不再提供。您当前的回答会分散读者的注意力,也可能会让未来的读者感到困惑。
# Outputs a pretty-printed version of the document's XML text.
$xml | Format-Xml
$userTerm = 'Quote'
$xml.RDF.Item | ? Title -like "*$userTerm*" | % { 
  [PSCustomObject]@{ 
    Source = "aero"
    Title = $_.Title 
    Link = $_.Link
    Description = $_.description 
  }
}