這裏是如何做到這一點(但你需要改變你的輸入是有效的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']")
非常感謝你太多 – 4d554d424c4553
如果我有一個以上的全球主義項目,我該怎麼辦?例如ListOfVersion和一個ListOfServers。當我添加另一個全局列表項時,上面的代碼將寫入我添加的最後一個全局列表。 – 4d554d424c4553
@ScottEmberson我擴展了我的答案,向您展示如何使用XPath選擇特定節點 – Duncan