2016-04-01 151 views
-2

我有一個xml文件說象下面,計算屬性數值

<data> 
    <fields> 
      <artifacts> 
       <artifact AL="68" CL="4" DL="0"> 
       </artifact> 
       <artifact AL="86" CL="2" DL="1"> 
       </artifact> 
       <artifact AL="34" CL="7" DL="0"> 
       </artifact> 
       <artifact AL="18" CL="1" DL="3"> 
       </artifact> 
      </artifacts> 
      <dart> 
       <bug> 
       <fields part="Major">Yes</fields> 
       <fields part="Major">Yes</fields> 
       <fields part="Major">No</fields> 
       </bug> 
      </dart> 
    </fields> 
</data> 

我想PowerShell來讀取XML文件,並得到總線(TL = AL + DL + CL)計算每個XML atrifact標籤和僅列出缺陷「Major」等於Yes。

這是我曾嘗試:

$xmlfile = Get-Content C:\Cdb\Cdb.xml 
foreach($line in $xmlfile) 
{ 
    [xml]$xml = Get-Content $line 
    $linesadded = $xml.data.fields.artifacts.artifact | Select AL 
    $lineschanged = $xml.data.fields.artifacts.artifact | Select CL 
    $linesdeleted = $xml.data.fields.artifacts.artifact | Select AL 
    $totalchangedlines = "$linesadded't$lineschanged't$linesdeleted"; 
    echo $totalchangedlines 
    <#echo $linesadded#> 
    $major = $xml.data.fields.dart.bug.fields 
    $majnumber = 0; 
    if ($major -eq "Yes") 
    { 
     $majnumber += [int]$major; 
    } 
} 

結果會低於行,如果我用

PS> echo $linesadded 
lines-added 
----------- 
68 
86 
34 
18

,但如果我給echo $totalchangedlines,輸出不來corrcetly。此外,如果列在表格欄中,它會更好。

+0

輸出應該是單獨的TL和缺陷計數(基於Major) – tilakraj

+1

歡迎來到StackOverflow!這不是一個腳本寫作服務。你試過什麼了? –

+0

請更新原來的問題(使用['edit' link](http://stackoverflow.com/posts/36355544/edit)),不要在評論中發佈代碼:) –

回答

0

對於我來說,最終想達到什麼目的並不十分清楚,但是您絕對需要在您發佈的代碼中修復幾件事情。

  • 首先和最重要的是:丟失foreach循環。您不想單獨處理XML文件的每一行。 [xml]$xml = Get-Content C:\Cdb\Cdb.xml會將整個文件讀入一個XML對象。
  • $linesdeleted = $xml.data.fields.artifacts.artifact | Select AL:最有可能應該是DL
  • 如果您希望單獨列表中的每個屬性使用Select-Object -Expand而不僅僅是Select-Object。如果您希望表格形式的所有工件的屬性使用Select-Object AL, CL, DL而不是選擇它們到單個變量中。
  • $major = $xml.data.fields.dart.bug.fields產生一個XML節點列表。他們永遠不會等於一個字符串"Yes"。如果要獲取XML節點的值列表,請添加.#text,如果要檢查該列表是否包含字符串"Yes",請將-eq更改爲-contains

隨着中說,有一些事情需要澄清:

  • 你想積累線或僅列出他們每個神器?
  • 什麼是鑄造$major爲一個整數,並添加到0應該實現?你的意思是增加$majnumber?在這種情況下,只需使用$majnumber++
  • 如果至少有一個主要值是「是」,數字應該增加嗎?如果所有主要值都是「是」?是否應該爲每個「是」的主要值增加?