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

3

参考`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                   
 

我该如何将response转换为xml并在一行中输出,就像上面的例子那样?
3个回答

5
您要定位的特定URI返回XML内容,Invoke-RestMethod 自动将其解析为类型为 System.Xml.XmlElement 的 XML DOM(文档 对象模型)(在此情况下是这些实例的数组)。
可视化输出的简单方法是访问 .OuterXml 属性:
(Invoke-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/).OuterXml

如果您真的需要一个单行表示:
(Invoke-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/).OuterXml -replace '\r?\n'

你可以使用面向对象编程技术处理这些 XmlElement 实例,依靠 PowerShell 方便的 XML DOM 适配;例如,以下使用 成员访问枚举 从所有数组元素中提取 <title> 子元素的值:
$entries = Invoke-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/
$entries.title

注意:

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

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


0

[xml]$testResult = (Invoke-RestMethod -Uri 'url').OuterXml $testResult.Details.Status

如果xml为3,则执行以上操作。


正确格式化您的帖子。另外,[xml]$testResult = (Invoke-RestMethod -Uri 'url').OuterXml 是不必要的 - 如果响应是 XML 文本,$testResult = Invoke-RestMethod -Uri 'url' 将会自动将其解析为 [xml] 实例。我假设 $testResult.Details.Status 只是演示如何深入了解 [xml] 实例的一个例子,但建议您在回答中指出这一点。 - undefined

0

只是一个轻微的变体:

PS /home/nicholas> 
PS /home/nicholas> $url="https://blogs.msdn.microsoft.com/powershell/feed/"                            
PS /home/nicholas> 
PS /home/nicholas> Invoke-RestMethod -Method Post -Uri $url -Body $body -ContentType 'application/xml'

尽管指定了“ContentType”,但是控制台打印出来的内容似乎并不是XML。还是挺有趣的。

1
你所看到的是PowerShell对System.Xml.XmlElement对象的默认格式化,它已经自动将XML响应文本解析成了这些对象。 - undefined
1
另外,在您的调用中,-ContentType 'application/xml' 实际上被 忽略 了,因为它仅涉及发送的 请求 数据;它不会请求 响应 格式。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接