【问题标题】:Replace text in xml file via Powershell通过 Powershell 替换 xml 文件中的文本
【发布时间】:2021-08-14 21:56:47
【问题描述】:
我有一个 XML 文件。我需要将语言替换为瑞典语。
<?xml version="1.0" encoding="utf-8"?>
<usersettings>
<Language type="string">English</Language>
</usersettings>
你能帮帮我吗?
$xmldata = [xml] (Get-Content $file)
$xmldata.usersettings.Language.'#text'
【问题讨论】:
标签:
xml
powershell
replace
【解决方案1】:
将新值分配给所需节点的InnerText 属性:
$xmldata.usersettings.Language.InnerText = 'Swedish'
# remember to save updated document to disk
$xmldata.Save((Resolve-Path $file).Path)
【解决方案2】:
补充Mathias R. Jessen's有用的答案:
您自己的方法也会奏效 - 尽管它 (a) 有点模糊,并且 (b) 依赖于目标元素已经包含文本(在您的情况下是正确的):
$xmldata.usersettings.Language.'#text' = 'Swedish'
PowerShell's adaptation of the XML DOM(将子元素和属性显示为属性)很方便,但记住精确的规则可能会很棘手:
简而言之:
-
当使用 PowerShell 对 XML DOM 的基于属性的适配时,您需要注意 XML 元素何时变为 [string] 类型的属性 - 您可以直接将字符串分配给该属性 - 与何时变为 @ 987654332@-typed 属性 - 需要使用另一个属性来分配文本内容。
-
其他属性可以是.'#text',如果存在现有文本内容(文本子节点)或 - 独立于任何现有子节点 - .InnerText,但请注意后者悄悄地替换任何现有的子节点,包括 element 子节点。