如何将 Invoke-RestMethod 的响应转换为 XML?

Nic*_*ers 3 xml rest powershell read-eval-print-loop invoke-restmethod

参考`Invoke-RestMethod的帮助文件:

PS /home/nicholas> 
PS /home/nicholas> $response = Invoke-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/ 
PS /home/nicholas> 
PS /home/nicholas> $json = $response | ConvertTo-Json                                                   
WARNING: Resulting JSON is truncated as serialization has exceeded the set depth of 2.
PS /home/nicholas> 
PS /home/nicholas> $xml = $response | ConvertTo-Xml  
PS /home/nicholas> 
PS /home/nicholas> $xml.OuterXml                   
 
Run Code Online (Sandbox Code Playgroud)

如何将其转换responsexml并在一行中输出(如上所述)?

mkl*_*nt0 5

您所定位的特定 URI 返回XML内容,该内容Invoke-RestMethod会自动解析为类型(在本例中为此类实例的数组)的 XML DOM(文档对象模型)。System.Xml.XmlElement

可视化输出的一个简单方法是访问该.OuterXml属性:

(Invoke-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/).OuterXml
Run Code Online (Sandbox Code Playgroud)

如果您确实需要单行表示:

(Invoke-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/).OuterXml -replace '\r?\n'
Run Code Online (Sandbox Code Playgroud)

您可以使用 OOP 技术来处理这些XmlElement实例,并依靠PowerShell 对 XML DOM 的方便调整;例如,以下内容<title>使用成员访问枚举从所有数组元素中提取子元素的值:

$entries = Invoke-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/
$entries.title
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 由于目标 URI 表示Atom提要,因此提要条目将作为XML元素数组而不是单个 XML文档返回。

  • Web 服务更常见的是返回解析为单个 XML 文档的 XML,作为[xml]( System.Xml.XmlDocument) 实例。