2012-02-14 99 views
0

我有XML像如下更新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标签中。

回答

1

使用一点XPath,你可以得到text()节点的句柄并设置它的值。

更新:要使您的Xpath查询动态根据文件的名称解析,您可以使用GetFileNameWithoutExtension方法。只要文件的名称与您的XML中的组件名称相匹配,这就会起作用。添加您的代码以检索foreach循环内的$count变量。

$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") 
+0

我已经添加了一些更清晰的问题兄弟。如果可能的话帮我解决 – Samselvaprabu 2012-02-14 13:53:08

+0

@Samselvaprabu我根据你添加的要求更新了我的答案。 – 2012-02-14 14:09:32

+0

它的工作原理。好朋友。我犯了一些错误。 – Samselvaprabu 2012-02-16 06:44:24