2015-01-16 82 views
0

我已經谷歌搜索如何做到這一點,我很努力去理解。我目前有這個XML通過PowerShell爲XML添加新值

<?xml version="1.0" encoding="utf-8"?> 
<gl:GLOBALLISTS Xmlns:gl="http://schemas.microsoft.com/VisualStudio/2005/workitemtracking/globallists"> 
<GLOBALLIST name="ListOfVersions - PWCC"> 
<LISTITEM value="1.1.3.2705" /> 
<LISTITEM value="1.1.4.2801" /> 
<LISTITEM value="1.1.4.2802" /> 
<LISTITEM value="1.1.4.2803" /> 
<LISTITEM value="1.1.4.2804" /> 
<LISTITEM value="1.1.5.2901" /> 
<LISTITEM value="1.1.5.2902" /> 
<LISTITEM value="Unknown" /> 
</GLOBALLIST> 
</gl:GLOBALLISTS> 

在C:\驅動器位置。我想使用PowerShell使用$ NewListItem添加新的列表項值。所以我可以在每次需要時指定。所以列表現在包括1.1.5.2903作爲一個例子。我嘗試過使用其他網站上提供的其他代碼,但沒有運氣。

任何幫助將非常appricated

回答

0

這裏是如何做到這一點(但你需要改變你的輸入是有效的XML,使用了「xmlns」必須是小寫)。

PS C:\temp> cat t.xml 
<?xml version="1.0" encoding="utf-8"?> 
<gl:GLOBALLISTS xmlns:gl="http://schemas.microsoft.com/VisualStudio/2005/workitemtracking/globallists"> 
<GLOBALLIST name="ListOfVersions - PWCC"> 
<LISTITEM value="1.1.3.2705" /> 
<LISTITEM value="1.1.4.2801" /> 
<LISTITEM value="1.1.4.2802" /> 
<LISTITEM value="1.1.4.2803" /> 
<LISTITEM value="1.1.4.2804" /> 
<LISTITEM value="1.1.5.2901" /> 
<LISTITEM value="1.1.5.2902" /> 
<LISTITEM value="Unknown" /> 
</GLOBALLIST> 
</gl:GLOBALLISTS> 
PS C:\temp> [xml]$data = [xml](get-content c:\temp\t.xml) 
PS C:\temp> $item = $data.CreateElement('LISTITEM') 
PS C:\temp> $item.SetAttribute('value', "1.1.5.2903") 
PS C:\temp> [void]$data.GLOBALLISTS.GLOBALLIST.appendChild($item) 
PS C:\temp> $data.save('c:\temp\t2.xml') 
PS C:\temp> cat t2.xml 
<?xml version="1.0" encoding="utf-8"?> 
<gl:GLOBALLISTS xmlns:gl="http://schemas.microsoft.com/VisualStudio/2005/workitemtracking/globallists"> 
    <GLOBALLIST name="ListOfVersions - PWCC"> 
    <LISTITEM value="1.1.3.2705" /> 
    <LISTITEM value="1.1.4.2801" /> 
    <LISTITEM value="1.1.4.2802" /> 
    <LISTITEM value="1.1.4.2803" /> 
    <LISTITEM value="1.1.4.2804" /> 
    <LISTITEM value="1.1.5.2901" /> 
    <LISTITEM value="1.1.5.2902" /> 
    <LISTITEM value="Unknown" /> 
    <LISTITEM value="1.1.5.2903" /> 
    </GLOBALLIST> 
</gl:GLOBALLISTS> 

如果您有多個GLOBALLIST項目,你就需要使用XPath來選擇合適的一個:

$node = $data.SelectSingleNode("//GLOBALLIST[@name='ListOfVersions - PWCC']") 
$node.appendChild($item) 

或者你可以匹配屬性的一部分:

$node = $data.SelectSingleNode("//GLOBALLIST[contains(@name, 'ListOfVersions']") 
+0

非常感謝你太多 – 4d554d424c4553

+0

如果我有一個以上的全球主義項目,我該怎麼辦?例如ListOfVersion和一個ListOfServers。當我添加另一個全局列表項時,上面的代碼將寫入我添加的最後一個全局列表。 – 4d554d424c4553

+0

@ScottEmberson我擴展了我的答案,向您展示如何使用XPath選擇特定節點 – Duncan