请告诉我如何使用powershell脚本编辑xml文件中的变量内容。
<application>
<name>My Application</name>
<platforms>
<platform>android</platform>
<icon gap:density="ld" src="/icon-1.png" />
<icon gap:density="md" src="/icon-2.png" />
</platforms>
</application>
我试过这个,但是,这不是我想要的,我想根据变量的名称进行编辑:名称,平台......但我不知道如何在powershell中
$editfiles=get-childitem . *.xml -rec
foreach ($file in $editfiles)
{
(get-content $file.pspath) |
foreach-object {$_ -replace "My Application", "My New App"} | set-content $file.pspath }
韩国社交协会 许多人请求帮助
答案 0 :(得分:2)
最好使用XML Api而不是文本搜索/替换来编辑XML文档。试试这个:
[xml]$xml = Get-Content foo.xml
$xml.application.name = "new name"
$xml.Save("$pwd\foo.xml")
答案 1 :(得分:0)
$newitem = $xml.CreateElement("Value")
$newitem.set_InnerXML("111")
$xml.Items.ReplaceChild($newitem, $_)
我认为这样的事情......我没有尝试过,所以我可能会偏离正轨
答案 2 :(得分:0)
请使用Keith Hill的答案,我只是在这里留下我的参考。他是对的,最好通过XML API进行修改。我从不使用XML,我对它不熟悉,所以我甚至都没有想到它。
我得问,你有没有尝试过这个?你找到了答案吗?这是非常基本的东西,只需要一两分钟的时间,谷歌可能会给你一个答案。
(Get-Content "C:\Source\SomeFile.XML") -replace "My Application","Shiny New App"|Set-Content "C:\Source\SomeFile.XML"
或者,如果您想要更改不太具体的内容,例如平台标签的“android”一词,您可以只包含标签以确保它能够正确使用。 (本例中使用的一些简写)
(GC "C:\Source\SomeFile.XML") -replace "<platform>android</platform>","<platform>tacos</platform>"|SC "C:\Source\SomeFile.XML"
但是说真的,至少在来之前尝试帮助自己,并要求获得勺子答案。我只是点击谷歌搜索“powershell替换文件中的文字”,第一个链接就会给你答案。
编辑:
如果不知道您要查找的内容并且仅仅基于标记,您将需要执行RegEx(正则表达式)搜索。
(GC "C:\Source\SomeFile.XML") -replace "(?<=`<platform`>).*?(?=`</platform`>)", 'New Platform'
这将提取文件的内容,查找前面和后面的任何文本长度,并用“新平台”替换该文本。请注意,大于号和小于号符号将使用严重字符进行转义(位于1的左侧,键盘上的选项卡上方)。以下是RegEx的细分:
(?<=<platform>)
检查我们正在寻找的字符串前面是字符串<platform>
。这不会被取代,只是确保我们有正确的起点
.*?
搜索除新行之外的任意数量的字符,并接受它可能为空的可能性。这是我们将要替换的比赛
(?=</platform>)
检查紧跟在它刚刚找到的字符串之后应该是字符串</platform>
。这不会被替换,只是确保我们的匹配在正确的位置结束。