2013-09-19 4 views
1

Если я хочу, чтобы удалить из строк документа с некоторой строкой ключом («Foo», например) Я использую это:Удалить несколько строк из файла с помощью PowerShell

$content = Get-Content 'C:/fake.txt' | Where-Object {$_ -notmatch 'foo'} 
$content | Out-File 'C:/fake.txt' 

Но теперь у меня есть файл с этой схемой :

... 
<data name="BLABLA" xml:space="preserve"> 
    <value>some data here</value> 
</data> 
... 
<data name="BLABLA22" xml:space="preserve"> 
    <value>some data</value> 
    <comment>some comment</comment> 
</data> 

И мне нужно удалить для ключа "BlaBla" это три линии

<data name="BLABLA" xml:space="preserve"> 
    <value>some data here</value> 
</data> 

И ключ "BLABLA2" это четыре Li nes

<data name="BLABLA22" xml:space="preserve"> 
    <value>some data</value> 
    <comment>some comment</comment> 
</data> 

Как это сделать с помощью powershell?

ответ

4

Если вы хотите удалить полный узел, то вам должно быть доставлено следующее.

# load the file into xml 
[xml]$dom = gc file.xml 

# find the node 
$nod = $dom.SelectSingleNode("/root/data[@name='BLABLA']") 

# remove the node from the parent 
$nod.ParentNode.RemoveChild($nod) 

# save the xml 
$dom.save("file.xml") 

я предполагал, ваши данные выглядит как это:

<root> 
    <data name="BLABLA" xml:space="preserve"> 
     <value>some data here</value> 
    </data> 
    <data name="BLABLA22" xml:space="preserve"> 
     <value>some data</value> 
     <comment>some comment</comment> 
    </data> 
</root> 
Смежные вопросы