2012-02-14 149 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