我的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代码计数应该转到组件名称Comp1的KLOC标签。
以下是查找获取代码计数的逻辑。我们的代码计数将在以下日志文件中提供。
总行数(第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标签中。
答案 0 :(得分:1)
使用一点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")