XMLタグから特定の属性にアクセスして変更しようとしています
XML:
<office>
<staff branch="Hanover" Type="sales">
<employee>
<Name>Tobias Weltner</Name>
<function>management</function>
<age>39</age>
</employee>
<employee>
<Name>Cofi Heidecke</Name>
<function>security</function>
<age>4</age>
</employee>
</staff>
<staff branch="London" Type="Technology">
<employee>
<Name>XXXX</Name>
<function>gement</function>
<age>39</age>
上記の例から、ブランチ属性を印刷してから、すべてのXMLでニューヨークなどの1つの値で変更し、以下のコードを使用してそれを実行したい
$xml=New-Object XML
$xml.Load("C:\FE6Work.xml")
$node=$xml.SelectNodes("/office/staff")
write-output $node.branch
$node.branch="New York"
しかし、要素が見つからないというエラーが表示されます。
誰か助けてくれますか?
以下を試してください:
$nodes = $xml.SelectNodes("/office/staff");
foreach($node in $nodes) {
$node.SetAttribute("branch", "New York");
}
これは、SelectNodes()によって返されるすべてのノードを反復処理し、各ノードを変更します。
次のように、[xml]
オブジェクトの属性に直接アクセスできます。
# C:\temp> $xml = [xml](Get-Content C:\FE6Work.xml)
# C:\temp> $xml.office.staff
branch Type employee
------ ---- --------
Hanover sales {Tobias Weltner, Cofi Heidecke}
London Technology {XXXX, Cofi}
# C:\temp> $xml.office.staff | foreach{$_.branch = "New York"}
# C:\temp> $xml.office.staff
branch Type employee
------ ---- --------
New York sales {Tobias Weltner, Cofi Heidecke}
New York Technology {XXXX, Cofi}
コンソールから属性を取得し、その値を変更する場合は?
$path=Read-Host -Prompt 'Enter path of xml file'
[xml]$xmldata = get-content "$path"
$tag = Read-Host -Prompt 'Enter tag'
$value = Read-Host -Prompt 'Enter value'
$xmldata.InstallConfig.$tag="$value"
$xmldata.Save($path)