2014-02-13 3 views
-1

, пожалуйста, сообщите мне, как редактировать содержимое переменной в файле xml с помощью скрипта powershell.Редактировать и сохранить изменения в файле с помощью сценария 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 Многие ТКС за помощью

+2

Что вы пытаетесь? Покажите немного усилий - не просто заходите и попросите Stack Overflow сделать это за вас. – alroc

ответ

2

Лучше редактировать XML-документы, используя XML Api, а не текстовый поиск/замену. Попробуйте следующее:

[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" 

Серьезно, хотя, по крайней мере, попытаться помочь себе, прежде чем приходить и просить, чтобы быть ложечки кормили ответы. Я просто попал в Google и искал «powershell replace text in file», и самая первая ссылка дала бы вам ответ.

Редактировать:
Не зная, что вы ищете и идете исключительно на основе тегов, вам необходимо выполнить поиск RegEx (Regular Expression).

(GC "C:\Source\SomeFile.XML") -replace "(?<=`<platform`>).*?(?=`</platform`>)", 'New Platform' 

Это будет тянуть содержимое файла, искать любую длину текста, который предшествует и за которым следует и заменить этот текст с «Новой платформой». Обратите внимание, что символы Greater Than и Less Than экранированы с серьезным символом (слева от 1 и над вкладкой на клавиатуре). Вот разбивка RegEx: (?<=<platform>) Проверяет, что непосредственно перед строкой, которую мы ищем, является строка <platform>. Это не будет заменено, это просто гарантирует, что у нас есть правильная отправная точка.
.*? выполняет поиск любого количества символов, кроме новой строки, и допускает, что он может быть пустым. Это наш матч, который будет заменен.
(?=</platform>) Проверяет, что сразу после строки, которую он только что нашел, должна быть строка </platform>. Это не будет заменено, это просто гарантирует, что наш матч заканчивается в правильном месте.

+0

проблема в том, что я хочу отредактировать то, что находится между тегами, не зная об этом, просто на основе имени tage, возможно ли это с помощью powershell?например, если я хочу редактировать андроид, я просто хочу указать, что я хочу редактировать платформу. ТКС – user3232418

Смежные вопросы