У меня есть 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.
Возвращает первый набор в строкедобавляет два пропущенных перед первым сета в конец списка.Мне нужно, чтобы их вернули в правильном порядке, как показано на узлах.
Я надеюсь, что все это имеет смысл, использование метода $Column
делает именно то, что мне нужно, но оно ломается, если изменениясделанный без моего ведома, я надеюсь исправить эту возможность, если это возможно.