2016-10-28 2 views
1

У меня есть файл XML, как приведено нижеДобавить новый элемент в XML с помощью PowerShell

<xml xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
<Product> 


<Feature Id="f1" Absent="qqq" Title="test" Level="1"> 

    <ComponentGroupRef Id="ComponentGroupRef1" /> 
    <ComponentGroupRef Id="ComponentGroupRef2" /> 
    <ComponentGroupRef Id="ComponentGroupRef3" /> 
    <ComponentGroupRef Id="ComponentGroupRef4" /> 
    <ComponentGroupRef Id="WindowsFolder1" /> 
    <ComponentGroupRef Id="ComponentGroupRef5" /> 
    <ComponentGroupRef Id="ComponentGroupRef6" /> 
    <ComponentGroupRef Id="ComponentGroupRef7" /> 
    <Feature Id="f2" Display="hidden"> 
    <ComponentRef Id="Component1" /> 
    </Feature> 
<FeatureGroupRef Id ="fg1"/> 
</Feature> 

     </Product> 

</xml> 

нужно добавить элемент между первой особенностью Feature тега ID = f1. Формат элемента я хочу добавить, приводится ниже

<ComponentGroupRef Id="Mycomponentname" />. 

Результирующий XML должен выглядеть, как показано ниже

<Feature Id="f1" Absent="qqq" Title="test" Level="1"> 

    <ComponentGroupRef Id="ComponentGroupRef1" /> 
    <ComponentGroupRef Id="ComponentGroupRef2" /> 
    <ComponentGroupRef Id="ComponentGroupRef3" /> 
    <ComponentGroupRef Id="ComponentGroupRef4" /> 
    <ComponentGroupRef Id="WindowsFolder1" /> 
    <ComponentGroupRef Id="ComponentGroupRef5" /> 
    <ComponentGroupRef Id="ComponentGroupRef6" /> 
    <ComponentGroupRef Id="ComponentGroupRef7" /> 
    <ComponentGroupRef Id="Mycomponentname" /> 
    <Feature Id="f2" Display="hidden"> 
    <ComponentRef Id="Component1" /> 
    </Feature> 
<FeatureGroupRef Id ="fg1"/> 
</Feature> 

     </Product> 

</xml> 

Я попытался следующий код для добавления элемента, но это не удается

$filePath="C:\Filename.xml" 
[xml]$doc=Get-Content $filePath 
$x= $doc.CreateElement("ComponentGroupRef") 
$x.SetAttribute('id','Mycomponentname') 
$doc.Product.Feature.AppendChild($x) 

Ошибка, которую я получаю в последней строке кода, приводится ниже

ответ

1

Не забудьте тег xml.

$filePath="C:\Filename.xml" 
[xml]$doc=Get-Content $filePath 
$x= $doc.CreateElement("ComponentGroupRef", $doc.xml.Product.NamespaceURI) 
$x.SetAttribute('id','Mycomponentname') 
$doc.xml.Product.Feature.AppendChild($x) 

Одно примечание, так как оно добавлено, оно будет отображаться в конце после fg1. Что-то вроде этого:

<xml xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product> 
    <Feature Id="f1" Absent="qqq" Title="test" Level="1"> 
     <ComponentGroupRef Id="ComponentGroupRef1" /> 
     <ComponentGroupRef Id="ComponentGroupRef2" /> 
     <ComponentGroupRef Id="ComponentGroupRef3" /> 
     <ComponentGroupRef Id="ComponentGroupRef4" /> 
     <ComponentGroupRef Id="WindowsFolder1" /> 
     <ComponentGroupRef Id="ComponentGroupRef5" /> 
     <ComponentGroupRef Id="ComponentGroupRef6" /> 
     <ComponentGroupRef Id="ComponentGroupRef7" /> 
     <Feature Id="f2" Display="hidden"> 
     <ComponentRef Id="Component1" /> 
     </Feature> 
     <FeatureGroupRef Id="fg1" /> 
     <ComponentGroupRef id="Mycomponentname" /> 
    </Feature> 
    </Product> 
</xml> 
+0

это работает, но как я могу избежать Xmlns =»" из него – TVSuser1654136

+0

Как вы сохранить его? Что-то вроде этого? '$ doc.save (" C: \ Filename.new.xml ")' – BenH

+0

Да, я сохраняю его с помощью $ doc.save ("C: \ Filename.xml") – TVSuser1654136