複数のノードを持つ XML ファイルがありますが、すべての子ノードがすべてのノードにあるわけではありません (100% ではなく、その用語を正しく使用しています)。子ノードを列ヘッダーとして CSV にエクスポートする必要があります。子ノードが最初のノードから欠落している場合、その子ノードはヘッダーとして含まれず、データはプルされません。
例:
<data>
<row>
<TEST_REF_ID>10001001</TEST_REF_ID>
<TEST_FIRST_NAME>Samuel</TEST_FIRST_NAME>
<TEST_LAST_NAME>Adams</TEST_LAST_NAME>
<TEST_SEX>M</TEST_SEX>
<TEST_BIRTHDATE>01/01/2001</TEST_BIRTHDATE>
</row>
<row>
<TEST_REF_ID>20002002</TEST_REF_ID>
<TEST_FIRST_NAME>John</TEST_FIRST_NAME>
<TEST_MIDDLE_NAME>R</TEST_MIDDLE_NAME>
<TEST_LAST_NAME>Smith</TEST_LAST_NAME>
<TEST_SEX>M</TEST_SEX>
<TEST_BIRTHDATE>01/01/1999</TEST_BIRTHDATE>
<TEST_SSN>123456789</TEST_SSN>
</row>
</data>
私がこれを行う場合:
#Location of XML Data is in a URL
[xml]$export = Invoke-WebRequest -Uri $url -Credential $credential
$export.data.row | Export-Csv "C:\test.csv" -NoTypeInformation
列 TEST_MIDDLE_NAME および TEST_SSN は CSV に含まれません。
私がこれを行う場合:
$columns = 'TEST_REF_ID', 'TEST_FIRST_NAME', 'TEST_MIDDLE_NAME',
'TEST_LAST_NAME', 'TEST_SEX', 'TEST_BIRTHDATE', 'TEST_SNN'
[xml]$export = Invoke-WebRequest -Uri $url -Credential $credential
$export.data.row |
Select-Object $columns |
Export-Csv "C:\test.csv" -NoTypeInformation
すべての列は、それらが何であるかを事前に知っている限り含まれています。列名が変更された場合、それは含まれず、間違った列にはデータがありません。
私がこれを行う場合:
#Location of XML Data is in a URL
[xml]$export = Invoke-WebRequest -Uri $url -Credential $credential
$export.SelectNodes("data/row/*") | Select-Object -Expand Name -Unique
ヘッダーとして使用できるすべての列名が表示されますが、正しい順序で表示されません。取得された順序で返されるため、この場合は、TEST_REF_ID、TEST_FIRST_NAME、TEST_LAST_NAME、TEST_SEX、TEST_BIRTHDATE、TEST_MIDDLE_NAME、TEST_SNN が返されます。
最初のセットを続けて戻し、最初のセットの前に欠けていた 2 つをリストの最後に追加します。ノードに表示されている正しい順序でそれらを引き戻す必要があります。
メソッドを使用する$Column
と、必要なことが正確に行われますが、知らないうちに変更が加えられると壊れます。可能であれば、その可能性を修正したいと考えています。