Анализировать дочерние узлы XML в правильном порядке с помощью PowerShell - PullRequest
0 голосов
/ 31 января 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...