Обновить значение узла XML после расчета - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть XML, как показано ниже

<Components>
  <Component>
    <Name>Comp1</Name>
    <Baseline>Comp1_2.1.0.20.2824</Baseline>
    <KLOC>0</KLOC>
    <IsCount>True</IsCount>
    </Component>
  <Component>
    <Name>Comp2</Name>
    <Baseline>Comp2_2_7_2012.3171</Baseline>
    <KLOC>0</KLOC>
    <IsCount>True</IsCount>
  </Component>
</Components>

У меня есть имена файлов журналов, такие как Comp1.log, Comp2.log и т. Д.

Количество кодов Comp1 должно идти в KLOCтег имени компонента Comp1.

Ниже приведена логика для определения количества кодов выборки.Наш счетчик кодов будет доступен в файле журнала следующим образом.

Всего строк (версия 2): 1084

Я завершу строки, кроме номера версии, используя следующую логику.

    $Files=Get-ChildItem -Path  $CCountFolder -Recurse
    $Totallinesver2+= Get-ChildItem -Path $CCountFolder -Recurse | Foreach { Get-Content $_.FullName | Select-string -simplematch "Total Lines (version 2)" }

        Foreach ( $line in $Totallinesver2) { $Count+= ($line -replace "Total Lines \(version 2\)        : ","" )}
        $count
Foreach ($file in $Files) { $file.Name }

Теперь я хотел сохранить KLOC в соответствующем компонентном теге KLOC.

1 Ответ

1 голос
/ 14 февраля 2012

Используя небольшой XPath, вы можете получить дескриптор узла text () и установить его значение.

Обновление : чтобы сделать ваш запрос Xpath динамическим на основе имен файлов, которые вы анализируете, вы можете использовать метод GetFileNameWithoutExtension. Это будет работать до тех пор, пока имя файла совпадает с именем компонента в вашем XML. Добавьте свой код, чтобы получить переменную $count внутри цикла foreach.

$doc = [xml] (Get-Content "C:\InputFile.xml")
$compFiles = 'Comp1.log', 'Comp2.log'

foreach ($file in $compFiles) {

    # Get $count from $file here...

    $compName = [IO.Path]::GetFileNameWithoutExtension($file)
    $xpath = "//Component[Name='${compName}']/KLOC/text()"
    $node = $doc.SelectSingleNode($xpath)
    $node.Value = $count
}

$doc.Save("C:\Output.xml")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...