2015-02-12 2 views
0

Привет У меня есть файл XML, какзначение SET для конкретного узла в XML

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
<PropertyGroup Label="UserMacros" /> 
<PropertyGroup> 
    <ExternalLibPath>XYZ</ExternalLibPath> 
    <PropertyModelSDKPath>ABC</PropertyModelSDKPath> 
</PropertyGroup> 
<PropertyGroup Condition="xyz" == 'true'"> 
    <DiagnosticConditionalDefines>FeatureA</DiagnosticConditionalDefines> 
</PropertyGroup> 
</Project> 

Я хочу, чтобы установить значение, чтобы FeatureB с помощью PowerShell.

я мог бы сделать что-то вроде этого, чтобы получить значение

$xmlFile = [XML] (get-Content filename) 
$xmlFile.Project.PropertyGroup.DiagnosticConditionalDefines 

Но писать мне нужно сделать что-то вроде

$xmlFile.Project.PropertyGroup[2].DiagnosticConditionalDefines="FeatureB" 

Я не рад, чтобы дать значение индекса «2» здесь, чтобы писать на этот узел, поскольку он может не оставаться таким.

Как изменить значение без добавления индекса здесь

+0

Это не является допустимым XML ... – arco444

+0

@ arco444 Попробуйте с < PropertyGroup Condition = "'xyz' == 'true'"> – notjustme

ответ

0

Это, как я должен был сделать это

$xmlFile = [xml] (Get-Content $file) 
$value=[string] $xmlFile.Project.PropertyGroup.DiagnosticConditionalDefines 
for($i=0; $i -lt $xmlFile.Project.PropertyGroup.Count ; $i++) 
    { 
     if($xmlFile.Project.PropertyGroup[$i].DiagnosticConditionalDefines.Length -gt 0) 
     { 
      $xmlFile.Project.PropertyGroup[$i].DiagnosticConditionalDefines 
      $xmlFile.Project.PropertyGroup[$i].DiagnosticConditionalDefines += "TEST" 
     } 
    } 
    $xmlFile.Save($file.FullName) 
0

Я попытался ниже код и его работу для меня. Код не может быть оптимизировано один, я новичок в PowerShell

$xml = [xml](get-content "C:\temp.xml") 
foreach($item in $xml.Project.PropertyGroup) 
{ 
    if($item.Condition -eq "'xyz' == 'true'") 
    { 
     $item.DiagnosticConditionalDefines = "FeatureDB" 
    } 
} 
$xml.Save($ProvisionFilePath) 
0

С отмеченной поправкой к вашему XML, это один из нескольких PowerShell-я способов модификации элемента на основе атрибута:

$xml = [xml](Get-Content $fileName) 
$node = $xml.Project.PropertyGroup | 
    Where { $_.GetAttribute('Condition') -eq "'xyz' == 'true'"} 
$node.DiagnosticConditionalDefines = 'new value' 

Вы можете подтвердить, что он изменил первоначальную структуру XML, просто снова выполняет выбор, на этот раз без присвоения его переменной:

$xml.Project.PropertyGroup | ? { $_.GetAttribute('Condition') -eq "'xyz' == 'true'"} 

Второй способ проверки является писать обновленное содержимое обратно в файл, а затем изучить файл:

$xml.Save($fileName)