我是相當新的Powershell,我有我相當奇怪的XML,我的主要目標是將XML轉換爲CSV,它將進一步用於同步到數據庫。 我已經使用Powershell代碼將xml提取到哈希中。 現在我有問題轉換成CSV。 Export-csv只寫入散列中的最後一個條目。不知道爲什麼這個,我檢查了幾個其他論壇,他們說Export-csv中的-append功能只與powershell 3.0,我使用1.0 ..Powershell XML Export-csv不附加散列
你能幫我解決這個問題嗎?
XML:
<catalog>
<segment>
<segmentname>Batch</segmentname>
<hosts>
<host>
<hostname>cglist17</hostname>
</host>
<host>
<hostname>cglist18</hostname>
</host>
<host>
<hostname>cglist19</hostname>
</host>
<host>
<hostname>cglist20</hostname>
</host>
</hosts>
</segment>
<segment>
<segmentname>Custom S2</segmentname>
<hosts>
<host>
<hostname>cglist21</hostname>
</host>
<host>
<hostname>cglist22</hostname>
</host>
</hosts>
</segment>
<segment>
<segmentname>eCommerce</segmentname>
<hosts>
<host>
<hostname>cglist09</hostname>
</host>
<host>
<hostname>cglist10</hostname>
</host>
</hosts>
</segment>
</catalog>
PowerShell代碼:
[xml]$xd=gc "C:\Users\sxa8869\Desktop\Webserv\segmentcat.xml"
$nodelist = $xd.selectnodes("/catalog/segment")
$MasterArray = @()
$MasterArray = "" | Select segmentname,hosts
$file="C:\Users\sxa8869\Desktop\Webserv\sha.csv"
foreach ($node in $nodelist) {
$hostsNode = $node.selectSingleNode("hosts")
$segmentname = $node.selectSingleNode("segmentname")
$MasterArray.segmentname=$segmentname.get_InnerXml()
foreach ($hostitem in $hostsNode) {
$hostnamenodes = $hostitem.selectnodes("host")
foreach ($hostname in $hostnamenodes) {
$MasterArray.hosts=$hostname.selectSingleNode("hostname").get_InnerXml()
#- Displays the hash in table format, want this format in csv
$MasterArray
# - displaying only the last element
$MasterArray | export-csv "file.csv" -notype
# - this works, but i want to use export-csv to get it in this format
'"'+$MasterArray.segmentname+'"'+","+'"'+$MasterArray.hosts+'"'
}
}
}
Required output :-
-----------------
"segmentname","hosts"
"Batch","cglist17"
"Batch","cglist18"
"Batch","cglist19"
"Batch","cglist20"
"Custom S2","cglist21"
"Custom S2","cglist22"
"eCommerce","cglist09"
eCommerce,"cglist10"
'$ MasterArray + =新物體psobject,物業@ {分段名= $ segname的主機= $ hostname.InnerText}'@Graimer:這是偉大的!工作完美..但我想了解更多。你會不會是我的一些基本問題?糾正我,如果即時通訊錯誤.. – 2013-02-25 14:53:36
我的問題是在我已經提到的線..首先我明白+ =添加元素到數組中,這是唯一的方式來添加他們?? ..當我打印我的$ MasterArray,爲什麼它首先打印主機列,然後是segementname ..很抱歉,如果這些是基本問題,我希望從這個基礎知識。 – 2013-02-25 14:59:50
'+ ='是最好的方法。你有一個叫做Add()的方法,但它總是會失敗。數組是固定大小,不能添加元素。要添加元素,需要創建一個包含舊數組值和新值(這在內存中完成)的新數組,然後將其保存爲變量(例如覆蓋舊數組)。這就是'+ ='所做的。數組沒有固定的列順序,所以輸出是「隨機的」。使用'$ array |格式 - 表格(或格式 - 列表) - 物業Column1,Column2等'設置您的訂單。如果您有更多問題,請在此處搜索。以前回答最基本的問題。 – 2013-02-25 15:23:06