2014-02-13 118 views
-1

请联系我如何使用powershell脚本编辑xml文件中的变量内容。使用powershell脚本编辑并保存文件中的更改

<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 } 

TKS 您的帮助很多TKS

+2

你有什么试过的?在这里显示一些努力 - 不要只是进来,并问Stack Overflow为你做这个。 – alroc

回答

2

最好使用XML Api而不是文本搜索/替换来编辑XML文档。试试这个:

[xml]$xml = Get-Content foo.xml 
$xml.application.name = "new name" 
$xml.Save("$pwd\foo.xml") 
0
$newitem = $xml.CreateElement("Value") 
$newitem.set_InnerXML("111")    
$xml.Items.ReplaceChild($newitem, $_) 

这样的事情我想..我没有尝试,所以我可能会偏离轨道

0

请用基思希尔的答案,我只是把我的地方留在这里作为参考。他是对的,最好通过XML API进行修改。我从来不使用XML,我不熟悉它,所以我甚至没有想到它。

我得问,你有没有尝试做这件事?你找到答案了吗?这是非常基本的东西,Google上的短短一两分钟可能会让你得到答案。

(Get-Content "C:\Source\SomeFile.XML") -replace "My Application","Shiny New App"|Set-Content "C:\Source\SomeFile.XML" 

或者,如果你想改变的东西不太具体,如单词“机器人”为平台的标签,你可以只包括标签,以确保它得到正确的事情。 (一些速记本例中使用)

(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的左侧和键盘上的Tab上方)转义。以下是RegEx的详细信息: (?<=<platform>)检查紧接在我们要查找的字符串前面的是字符串<platform>。这不会被取代,它只是确保我们有正确的起点。
.*?搜索除新行之外的任意数量的字符,并接受它可能为空的可能性。这是我们的比赛,将被取代。
(?=</platform>)检查紧跟在刚刚找到的字符串后面的字符串应该是字符串</platform>。这不会被替换,它只是确保我们的比赛结束在正确的地方。

+0

这里的问题是我想编辑标签之间的内容而不知道它,只是基于该标签的名称,是否可以用powershell?例如,如果我想编辑android我也想指定我想编辑平台。 TKS – user3232418