2017-03-24 188 views
1

我在PowerShell中首次使用XML文件。我有一個簡單的腳本失敗。我需要使用web請求來獲取XML內容,然後將其保存到文件夾中供以後處理。Powershell:將XML寫入文件

下面是代碼:

$IP = 8.8.8.8 
$ipgeo = new-object System.Xml.XmlDocument 
$ipgeo = ([xml](Invoke-WebRequest "http://freegeoip.net/xml/$IP").Content).Response 
$ipgeo.save("c:\ipgeo\IPXML\$IP.xml") 

當我運行它,我得到以下錯誤:

Method invocation failed because [System.Xml.XmlElement] does not contain a method named 'save'. At line:3 char:1 
+ $ipgeo.save("c:\ipgeo\IPXML\$IP.xml") 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
+ CategoryInfo: InvalidOperation: (save:String) [], RuntimeException 
+ FullyQualifiedErrorId : MethodNotFound 

我在做什麼錯?

+0

@CodeCaster'System.Xml.XmlElement'不包含命名方法「保存」或'保存' - 投射是問題,所以改變大小寫不會有幫助 – arco444

+0

@arco你是對的。 'System.Xml.XmlDocument' [_does_有一個Save()方法](https://msdn.microsoft.com/en-us/library/dw229a22(v = vs.110).aspx),但它們覆蓋'$ ipgeo'。 – CodeCaster

+0

@CodeCaster它*是*給出這個錯誤。這是因爲'.Response'被選中,它是一個'XmlElement',所以如果你用下面的代碼行中的其他東西覆蓋它,那麼你實例化的內容就不重要了。 – arco444

回答

2

可以通過引用根節點的OuterXml財產保存XML文檔的一個子集,你想:

# instead of $ipgeo.Save("c:\ipgeo\IPXML\$IP.xml") 
$ipgeo.OuterXml |Out-File "c:\ipgeo\IPXML\$IP.xml" 
+0

工作正常!非常感謝你的快速反應! – Doug

+0

還有一個問題,我如何才能讀取我剛剛寫的XML文件?我試過:$ ipgeo = [System.Xml.XmlDocument](Get-Content c:\ ipgeo \ IPXML \ $ IP.xml),但沒有返回任何內容。 – Doug

+0

我想通了。我需要使用:$ ipgeo =([System.Xml.XmlDocument](Get-Content c:\ ipgeo \ IPXML \ $ IP.xml))。 – Doug