【发布时间】:2015-09-18 23:58:23
【问题描述】:
在 PowerShell v3 中,我创建了一个这样的 XmlDocument 对象:
[System.Xml.XmlDocument]$xmldoc = new-object System.Xml.XmlDocument
$xmldoc.Load($xmlfile)
经过一些处理,我想让用户更新$xmlfile中一个节点的值。
给定节点名称和要分配的新值,如何更新$xmldoc?
$node = StartBoundry
$newvalue = StringValue
我知道我可以这样保存:
$xmldoc.Save($xmlfile)
原始 XML 如下所示:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Author>MYDOMAIN\user.name</Author>
<Description>my description</Description>
</RegistrationInfo>
<Triggers>
<TimeTrigger>
<Repetition>
<Interval>PT2M</Interval>
<StopAtDurationEnd>false</StopAtDurationEnd>
</Repetition>
<StartBoundary>2015-09-18T09:29:14</StartBoundary>
<Enabled>true</Enabled>
<RandomDelay>PT3S</RandomDelay>
</TimeTrigger>
</Triggers>
...
我已经像这样尝试过 XPath:
$ns = @{'ns'='http://schemas.microsoft.com/windows/2004/02/mit/task'}
$xml = Select-Xml -Xml $xmldoc -XPath "//ns:Task/ns:Triggers/ns:TimeTrigger/ns:StartBoundary" -Namespace $ns
$xml.Node.Value = $newvalue
但是如果我只有节点名,如何获取路径?有没有办法做到这一点,还是我必须遍历所有元素,直到找到节点名称匹配?
【问题讨论】:
标签: xml powershell xpath