这里是如何做到这一点(但你需要改变你的输入是有效的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