我有2个XML文件。两者几乎相同,但具有不同的键值。两者看起来都像下面的示例,但具有不同的值:
<SMSServerConf>
<IP>localhost</IP>
<Port>10010</Port>
<Provider>3</Provider>
<Link>192.168.0.146:2775</Link>
<UserName>smppclient1</UserName>
<Password>password</Password>
<Apiid>smppclient1</Apiid>
<Encoding>0</Encoding>
<Ton>1</Ton>
<Npi>1</Npi>
<ValidityPeriod>20</ValidityPeriod>
<ValidityPeriodEnable>true</ValidityPeriodEnable>
<SenderName></SenderName>
</SMSServerConf>
目前,我使用以下代码将值从一个文件插入另一个文件:
$s_xml = [xml](Get-Content $s_location)
$d_xml = [xml](Get-Content $d_location)
$data = $s_xml.Configuration.SMSServerConf
$d_xml.Configuration.SMSServerConf.IP = $s_xml.Configuration.SMSServerConf.IP
$d_xml.Configuration.SMSServerConf.Port = $s_xml.Configuration.SMSServerConf.Port
$d_xml.Configuration.SMSServerConf.Provider = $s_xml.Configuration.SMSServerConf.Provider
$d_xml.Configuration.SMSServerConf.Link = $s_xml.Configuration.SMSServerConf.Link
$d_xml.Configuration.SMSServerConf.UserName = $s_xml.Configuration.SMSServerConf.UserName
$d_xml.Configuration.SMSServerConf.Password = $s_xml.Configuration.SMSServerConf.Password
$d_xml.Configuration.SMSServerConf.Apiid = $s_xml.Configuration.SMSServerConf.Apiid
$d_xml.Configuration.SMSServerConf.Encoding = $s_xml.Configuration.SMSServerConf.Encoding
$d_xml.Configuration.SMSServerConf.Ton = $s_xml.Configuration.SMSServerConf.Ton
$d_xml.Configuration.SMSServerConf.Npi = $s_xml.Configuration.SMSServerConf.Npi
$d_xml.Configuration.SMSServerConf.ValidityPeriod = $s_xml.Configuration.SMSServerConf.ValidityPeriod
$d_xml.Configuration.SMSServerConf.ValidityPeriodEnable = $s_xml.Configuration.SMSServerConf.ValidityPeriodEnable
$d_xml.Configuration.SMSServerConf.SenderName = $s_xml.Configuration.SMSServerConf.SenderName
$d_xml.Save($d_location)
此时看起来我每次添加或删除密钥时都必须维护脚本。是否可以只指示节点名称,然后遍历每个键并更改值而不是分别明确说明每个键?
答案 0 :(得分:3)
如果您想要替换节点的整个内容,只需更换整个节点就更简单了:
[xml]$d_xml = Get-Content $d_location
[xml]$s_xml = Get-Content $s_location
$n1 = $d_xml.SelectSingleNode('/Configuration/SMSServerConf')
$n2 = $s_xml.SelectSingleNode('/Configuration/SMSServerConf')
$parent = $n1.ParentNode
# remove existing node
$parent.RemoveChild($n1) | Out-Null
# add node from source XML
$parent.AppendChild($d_xml.ImportNode($n2, $true)) | Out-Null