提取XML数据并另存为XML文件

时间:2017-04-12 08:27:52

标签: xml powershell soap

我正在试图弄清楚如何从PowerShell中从Web服务收到的XML数据中提取数据。我想将它作为XML文件输出。

我正在使用Invoke-WebRequest使用-Outfile保存文件,但我不想要所有的soap信封数据。从下面的示例数据中,我想要的是XML格式的<Visit_Requests>中的数据,稍后将使用SSIS导入数据库。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <getData_Visit_RequestsResponse xmlns="http://example.com/">
            <getData_Visit_RequestsResult RequestDate="10 Apr 2017" NumberOfRecordsReturned="54" MaximumNumberOfRecordsReturned="10000" RecordsStartAtRowNumber="1" PagingImplemented="true" ErrorMessage="">
                <Visit_Requests>
                    <Visit_Request>
                        <Visit_ID>3907</Visit_ID>
                        <Building_Name>Building HHH</Building_Name>
                        <Level_Name>North Wing</Level_Name>
                        <Contact_Name>Bill Bloggs</Contact_Name>
                    </Visit_Request>
                    <Visit_Request>
                        <Visit_ID>3904</Visit_ID>
                        <Building_Name>Building GG</Building_Name>
                        <Level_Name>South Wing</Level_Name>
                        <Contact_Name>Mary Bloggs</Contact_Name>
                    </Visit_Request>
                    <Visit_Request>
                        <Visit_ID>3970</Visit_ID>
                        <Building_Name>Building VV</Building_Name>
                        <Level_Name>East Wing</Level_Name>
                        <Contact_Name>Bob Bloggs</Contact_Name>
                    </Visit_Request>
                    <Visit_Request>
                        <Visit_ID>4707</Visit_ID>
                        <Building_Name>Building ZZ</Building_Name>
                        <Level_Name>West Wing</Level_Name>
                        <Contact_Name>Joe Bloggs</Contact_Name>
                    </Visit_Request>
                </Visit_Requests>
            </getData_Visit_RequestsResult>
        </getData_Visit_RequestsResponse>
    </soap:Body>
</soap:Envelope>

我尝试使用this方法,但无处可去。我一直在收到错误

  

无法导入空节点

  

[System.Xml.XmlElement]不包含名为“保存”的方法

我尝试使用

将内容写入另一个文件
$xmlnode | Out-File 'c:\temp\aaaatest.xml'

但是所有写的都是PowerShell对象{Visit_Request, Visit_Request...}

使用$xmlnode.OuterXml获取我想要的结果的代码。

(New-Object System.Net.WebClient).Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials

[xml]$result = Invoke-WebRequest $uri -Method post -ContentType 'text/xml' -Body $SOAP_getData_Visit_Requests #-OutFile .\response.xml 

[System.Xml.XmlElement] $root = $result.get_DocumentElement()
$xmlnode = $root.Body.getData_Visit_RequestsResponse.getData_Visit_RequestsResult.Visit_Requests

$xmlnode.OuterXml| out-file ".\response.xml"

1 个答案:

答案 0 :(得分:0)

我猜您需要$xmlnode.InnerXml$xmlnod.OuterXml

请发布您的代码,因为您不清楚如何处理XML。