Нужна помощь в преобразовании XML в CSV

Мне нужно преобразовать приведенный ниже XML в CSV

      <App>
    <SecurityGroup name="Admin">
        <Member username="John1" displayName="JohnDoe"/>
        <Member username="Jane1" displayName="JoeDoe"/>
    </SecurityGroup>
</App>

Я также пробовал ниже

      $xml.app.childnodes | Select-Object @(
    @{l="name";e={ $_.member.username}},
    @{l="display";e={ $_.member.displayname }},
    @{l="group";e={ $_.name }} 
) | Export-CSV "c:/test.csv"

Формат выглядит хорошо, но поле имени пользователя и отображаемое имя отображаются в одном поле, а не в отдельных строках.

      Security Group    Username           Displayname
Admin             John1 Jane1        JohnDoe JaneDoe

Мне нужен следующий формат

1 ответ

В вычисляемых свойствах, заданных какSelect-Objectаргументы,$_.memberсоздает массив из всех элементов (из-за перечисления доступа к членам ), поэтому ваш CSV содержит несколько значений свойств для каждого поля.

Вместо этого вы хотите спуститься к элементам, уже находящимся в цепочке доступа к первому члену:

      $xml.app.childnodes.member | Select-Object @(
    @{ l='name'; e='username'}
    @{ l='display'; e='displayname'}
    @{ l='group'; e={ $_.ParentNode.name }} 
) | Export-CSV "c:/test.csv"

Выход:

      "name","display","group" 
"John1","JohnDoe","Admin"
"Jane1","JoeDoe","Admin" 

Примечания:

  • Когда у вас есть прямое сопоставление входных и выходных свойств, вы можете упростить код, указав имя входного свойства в виде строки вместо блока сценария для выражения ( e ) вычисляемого свойства , как я сделал выше.
  • Вы можете опустить запятую в подвыражении массива@(…), так как каждый элемент массива располагается на своей строке. Вам нужна только запятая при указании нескольких элементов массива в строке.
  • The $xml.app.childnodes.memberсоздает массив всехMemberэлементы, содержащиеся в любом дочернем элементе подAppэлемент. Возможно, вы захотите ограничить перечислениеSecurityGroupдочерние элементы, написав это следующим образом:
            $xml.App.SecurityGroup.Member 
    
Другие вопросы по тегам