2014-02-13 155 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