XML 文件中的条件替换

2024-01-05

我正在使用 PowerShell 递归地替换 XML 文件中的文本。该脚本在替换时工作正常。但是,XML 文件也有不应替换的文件路径。这是当前正在使用的脚本

if ( $content -match ' web site | web-site ' ) {
    $content -replace ' web site ',' New Site ' -replace ' web-site ',' New Site ' |
        Out-File $file.FullName -Encoding utf8

例如,如果 XML 文件有

<title>web site</title>
<subtitle>web-site</subtitle>
<path>c:/web site/website.xml</path>

预期输出应如下所示。应忽略文件路径中的匹配文本。如何添加一个条件来忽略字符串(如果介于两者之间)/web site/ or /web-site.xml?

<title>New Site</title>
<subtitle>New Site</subtitle>
<path>c:/web site/website.xml</path>

将 XML 作为 XML 处理通常会更加高效且不易出错。选择要更新的节点,然后将修改后的数据保存回文件。

$filename = 'C:\path\to\your.xml'

[xml]$xml = Get-Content $filename
$xml.SelectNodes('//*[self::title or self::subtitle]') |
    Where-Object { $_.'#text' -match 'web.site' } |
    ForEach-Object { $_.'#text' = 'New Site' }
$xml.Save($filename)

如果您需要修改节点文本的子字符串,您可以执行以下操作:

$filename = 'C:\path\to\your.xml'

[xml]$xml = Get-Content $filename
$xml.SelectNodes('//*[self::title or self::subtitle]') |
    Where-Object { $_.'#text' -match 'web.site' } |
    ForEach-Object { $_.'#text' = $_.'#text' -replace 'web.site', 'New Site' }
$xml.Save($filename)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XML 文件中的条件替换 的相关文章

随机推荐