0

次のようなxmlがあります

<Settings>
    <CentralOnly>
        <DateLists>
            <DateList Name="name1" ID="1">
                <Date>*-01-01</Date>
                <Date>*-12-25</Date>
                <Date>2007-05-28</Date>
                <Date>2007-09-03</Date>
            </DateList>
            <DateList Name="name2" ID="2">
                <Date>2008-11-11</Date>
                <Date>2008-11-27</Date>
            </DateList>
            <DateList Name="name3" ID="3">
                <Date>2008-03-21</Date>
                <Date>2010-04-02</Date>
            </DateList>
        </DateLists>
    </CentralOnly>
</Settings>

最終的な目標は、これを sql server 2008 r2 データベースに入れることです。これを(不十分に)行う私の現在のモードは、各列が個別のテキストファイルに書き込まれることです

dateID.txt   |  specificDate.txt
    1        |     *-01-01
    1        |     *-12-25
    1        |     2007-05-28
    1        |     2007-09-03
    2        |     2008-11-11
    2        |     2008-11-27
    3        |     2008-03-21
    2        |     2010-04-02

以下のコードは、その方法でそれを行うのに正しい軌道に乗っていると思います (まだ動作しません)。しかし、1つのファイル、おそらくcsvでこれを行う方法があるに違いありませんか?

set-executionpolicy unrestricted
[xml]$config = Get-Content c:\path\config.xml
new-item c:\path\dlDays.txt -type file -force
new-item c:\path\dlDLID.txt -type file -force
$xml = $config.settings.DateLists.DateList | % $_.DateList{
    $dateID = $_.id
    $eachDate = $_.date | % $_.date{
        $specificDate = $_.date
        add-content c:\path\dlDays.txt $specificDate
        add-content c:\path\dlDLID.txt $dateID
    }
}
4

2 に答える 2

3

#12: 出力オブジェクト

あなたの XML ファイルをいじって、2 つのファイルに出力する代わりに、オブジェクトの配列を作成しました。次に、これらのオブジェクトを Export-Csv にパイプしました。

[xml]$config = Get-Content date.xml
$newdlist = @()
foreach($dlist in $config.Settings.CentralOnly.DateLists.DateList){
    $dateID = $dlist.ID
    foreach($date in $dlist.Date){
        $newdlist += @(New-Object -TypeName psobject -Property @{'ID'=$dateID;'Date'=$date})
    }
}
$newdlist | Export-Csv -Path dat.csv

$newdlist を再度使用する場合は、Import-Csv を使用して Csv ファイルをインポートするだけです。

PS C:\> $data = Import-Csv date.csv
PS C:\> $data

ID                                                          Date
--                                                          ----
1                                                           *-01-01
1                                                           *-12-25
1                                                           2007-05-28
1                                                           2007-09-03
2                                                           2008-11-11
2                                                           2008-11-27
3                                                           2008-03-21
3                                                           2010-04-02

PowerShell で SQL を使用する方法はわかりませんが、データを使用する方が簡単です。

$data | % {"INSERT '$($_.Date)' INTO 'Id' Where 'Id'='$($_.ID)'"}

もっと

CSV ファイルは次のようになります。

#TYPE System.Management.Automation.PSCustomObject
"ID","Date"
"1","*-01-01"
"1","*-12-25"
"1","2007-05-28"
"1","2007-09-03"
"2","2008-11-11"
"2","2008-11-27"
"3","2008-03-21"
"3","2010-04-02"
于 2013-04-01T22:21:33.847 に答える
1

csvファイルを生成するために使用したものは次のとおりです。

[xml]$xml = Get-Content -path "c:\temp\datedata.xml"

$nodes = $xml.Settings.CentralOnly.DateLists.DateList

$array = @()

foreach ($node in $nodes) {

    $id = $node.ID

    foreach ($date in $node.Date) {

        $entry = New-Object PSObject -property @{
            ID = $id
            Date = $date
        }

        $array += $entry
    }

}

$array | Export-Csv -Path 'c:\Temp\data.csv' -Delimiter ',' -noTypeInformation

注: csv ファイルからタイプを除外するには、-noTypeInformation を使用する必要があります。

于 2013-04-01T22:58:13.700 に答える