2012-02-14 15 views
0

更新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としてログファイル名を有するなどしていますように、私はXMLを持っています

Comp1のコード・カウントすべきである行きますコンポーネント名Comp1のKLOCタグに転送します。

フェッチコードの数を見つけるロジックは次のとおりです。私たちのコード数は、次のようにログファイルで利用可能になります。

合計行(バージョン2):1084

私は、次のロジックを使用して、バージョン番号以外の文字列を終了します。

私はそれぞれのコンポーネント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

+0

@Samselvaprabu私はあなたの追加された要件に基づいて私の答えを更新しました。 –

+0

それは動作します。素晴らしい友達。私はいくつかの間違いをした。 – Samselvaprabu

関連する問題