2013-07-18 85 views
0

以下是我的XML值。如何通過讀取xml節點值來查找和替換?

<Components> 
    <Component> 
     <FullName>CoreEnvironment</FullName> 
     <ShortName>CoreEnv</ShortName> 
    </Component> 
    <Component> 
     <FullName>Excel Addin 2007</FullName> 
     <ShortName>Excel_07</ShortName> 
    </Component> 
</Components> 

如果用戶傳遞組件的全名,則應顯示相應的短名稱。我能夠使用PowerShell在xml中讀取特定的節點。但是在這種情況下,如果找到一個FullName節點,則應該顯示相應的短名稱節點。我無法弄清楚這個邏輯。

回答

0
[xml]$xml="<Components> 
    <Component> 
     <FullName>CoreEnvironment</FullName> 
     <ShortName>CoreEnv</ShortName> 
    </Component> 
    <Component> 
     <FullName>Excel Addin 2007</FullName> 
     <ShortName>Excel_07</ShortName> 
    </Component> 
</Components>" 

$test="Excel Addin 2007" 

$xml.Components.Component |% { if($_.fullname -match $test) { write-host $_.ShortName}} 
0

到Kayasax的答案類似,但使用XPath

[xml] $xml = "<Components> 
    <Component> 
     <FullName>CoreEnvironment</FullName> 
     <ShortName>CoreEnv</ShortName> 
    </Component> 
    <Component> 
     <FullName>Excel Addin 2007</FullName> 
     <ShortName>Excel_07</ShortName> 
    </Component> 
</Components>" 

$param = "Excel Addin 2007" 

$xml.SelectNodes('//Component') | Where-Object {$_.FullName -eq "$param" } | Select-Object -ExpandProperty ShortName