私はPowershellにかなり慣れていません。私によると、かなり奇妙なxmlがあります。私の主な目的は、XMLをCSVに変換し、データベースとの同期にさらに使用することです。Powershell コードを使用して、xml をハッシュに抽出しました。今、それらをCSVに変換する際に問題があります。Export-csv は、ハッシュの最後のエントリのみを書き込みます。理由がわからないので、他のいくつかのフォーラムをチェックしましたが、Export-csv の -append 機能は powershell 3.0 のみであるとのことで、私は 1.0 を使用しています。
これから私を助けてくれますか?
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"