需要从SOAP响应创建XML

时间:2015-09-08 16:50:10

标签: xml web-services powershell soap web

我有这个Powershell脚本,它允许我从Web Service调用到屏幕打印SOAP响应。但是,我现在需要将SOAP响应写成XML文件。

我该怎么做?

这是脚本:

function Execute-SOAPRequest ([Xml]$SOAPRequest, [String] $URL) {
    write-host "Sending SOAP Request To Server: $URL"
    $soapWebRequest = [System.Net.WebRequest]::Create($URL)

    $soapWebRequest.ContentType = 'text/xml;charset="utf-8"'
    $soapWebRequest.Accept      = "text/xml"
    $soapWebRequest.Method      = "POST"

    write-host "Initiating Send."
    $requestStream = $soapWebRequest.GetRequestStream()
    $SOAPRequest.Save($requestStream)
    $requestStream.Close()

    write-host "Send Complete, Waiting For Response."
    $resp = $soapWebRequest.GetResponse()
    $responseStream = $resp.GetResponseStream()
    $soapReader = [System.IO.StreamReader]($responseStream)
    $ReturnXml = [Xml] $soapReader.ReadToEnd()
    $responseStream.Close()

    write-host "Response Received."

    return $ReturnXml
}

$url = 'http://server/services/Assets'
$soap = [xml]@'
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://avid.com/interplay/ws/assets/types">
   <soapenv:Header>
      <typ:UserCredentials>
         <typ:Username>****</typ:Username>
         <typ:Password>****</typ:Password>
      </typ:UserCredentials>
   </soapenv:Header>
   <soapenv:Body>
      <typ:GetChildren>
         <typ:InterplayURI>interplay://server/Projects/Ryan Jensen/Fix</typ:InterplayURI>
         <typ:IncludeFolders>true</typ:IncludeFolders>
         <typ:IncludeFiles>true</typ:IncludeFiles>
         <typ:IncludeMOBs>true</typ:IncludeMOBs>
      </typ:GetChildren>
   </soapenv:Body>
</soapenv:Envelope>
'@

function WriteXmlToScreen ($xml) {
    $StringWriter = New-Object System.IO.StringWriter
    $XmlWriter = New-Object System.XMl.XmlTextWriter $StringWriter
    $xmlWriter.Formatting = "indented"
    $xml.WriteTo($XmlWriter)
    $XmlWriter.Flush()
    $StringWriter.Flush()
    Write-Output $StringWriter.ToString()
}

$ret = Execute-SOAPRequest $soap $url
WriteXmlToScreen $ret

1 个答案:

答案 0 :(得分:0)

您的Execute-SOAPRequest函数已经返回一个XML对象,所以您需要做的就是保存它:

$ret = Execute-SOAPRequest $soap $url
$ret.Save('C:\path\to\output.xml')