Чтение файла XML с использованием объекта XML приводит к отсутствию записей - PullRequest
0 голосов
/ 17 апреля 2020

Мне дали XML файлы для обновления, но при чтении в файле с использованием объекта XML пропускаются несколько записей go.

Файл XML (обратите внимание на два разделаГруппы )

<configuration>
  <configSections>
    <sectionGroup name="Albert" type="Male, Outlook=neutral" >
         <section name="Bobby" type="Male, Outlook=happy"/>
         <section name="Cathy" type="Female, Outlook=neutral"/>
         <section name="David" type="Male, History=Yes"/>
         <sectionGroup name="Mark" type="Male, Outlook=happy" >
              <section name="Matt" type="Male, Outlook=neutral"/>
         </sectionGroup>
    </sectionGroup>
  </configSections>
</configuration>

Сценарий:

[XML] $xmlObj=Get-Content "C:\temp\infile.xml" -Raw

foreach ($elem in $xmlObj.configuration.configSections.sectionGroup.section)
    {
    Write-Host ("=> {0}='{1}'" -f $elem.name, $elem.type) 
    }

Вывод:

=>  Bobby='Male, Outlook=happy'
=>  Cathy='Female, Outlook=neutral'
=>  David='Male, History=Yes'

Обратите внимание, что это не включает имя (Альберт) или два имени во втором разделе (Марк, Мэтт).

Я не могу изменить несколько XML файлов, поэтому:

  1. что нужно изменить в коде, чтобы увидеть все записи?
  2. При их записи назад, требуются ли дополнительные изменения?

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Используйте выражение XPath для выбора всех <section> элементов независимо от их местоположения:

foreach($elem in $xmlObj.SelectNodes('//section')){
  # work with $elem
}
0 голосов
/ 17 апреля 2020

Хорошо, решите это. Каждый отдельный раздел, который должен быть указан. Это возвращает все 6

$xmlObj.configuration.configSections.sectionGroup  | % { Write-Host ("=> {0}='{1}'" -f $_.name, $_.type) }

$xmlObj.configuration.configSections.sectionGroup.section | % { Write-Host ("=> {0}='{1}'" -f $_.name, $_.type) }

$xmlObj.configuration.configSections.sectionGroup.sectionGroup | % { Write-Host ("=> {0}='{1}'" -f $_.name, $_.type) }

$xmlObj.configuration.configSections.sectionGroup.sectionGroup.section | % { Write-Host ("=> {0}='{1}'" -f $_.name, $_.type) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...