通过powershell向XML添加新值

时间:2015-01-16 13:36:34

标签: xml powershell

我已经用Google搜索了如何做到这一点,我很难理解。我目前有这个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作为示例。我尝试使用其他网站上提供的其他代码,但没有运气。

任何帮助都会非常适合

1 个答案:

答案 0 :(得分:0)

以下是如何操作的(但您需要将输入更改为有效的XML,&x; xmlns&#39;必须为小写)。

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']")