2017-12-15 4 views
-1

PowerShellスクリプトでXMLファイルの各行を読みたい。 XMLファイルのGet-Contentの後に、私はforeachステートメントを使って各行要素を読みました。それは動作していませんでした。 XMLファイルの各行を読むにはどうすればよいですか?XMLファイルの各行を読む

Test.xml

<?xml version="1.0" encoding="utf-8"?> 
<Install-Plan> 
    <ADSetup> ... </ADSetup> 
    <SQLSetup> 
     <SqlServerName>ServerName</SqlServerName> 
     <SqlVersion>SQL2014</SqlVersion> 
     <InstanceName>MSSQLSERVER</InstanceName> 
     <SqlInstall>TRUE</SqlInstall> 
     <SqlClientInstall>TRUE</SqlClientInstall> 
     <RSInstall>TRUE</RSInstall> 
     ... 
    </SQLSetup> 
</Install-Plan> 

のPowerShell:

[xml]$XmlData = Get-Content test.xml -ErrorAction Stop 
$Config = $xmlData.SelectNodes("//Install-Plan"); 
$uConfigFile = $Config.CommonConfig.SQLSetup 
foreach ($uconfigval in $uConfigFile) { 
    switch ($uconfigval[0]) { 
     "$SQLServerData.SQLSetup.Sqlserver" {$uSQL_SERVER_NAME = $uconfigVal.Trim()} 
     "$SQLServerData.SQLSetup.SqlVersion" {$uSQLVERSION = $uconfigVal[1].Trim()} 
     ... 
    } 
+2

をあなたの質問は非常にあいまいで、実際のを含みません私たちは、あなたが何をしようとしているのか、どのようにしてやっているのか分かりません。あなたは本当に[How to Ask](http://stackoverflow.com/questions/how-to-ask)を読む必要があります。 –

+0

ここにコードを追加してください。今まであなたが試したことは何でも。 – Billa

+0

私はxmlのSqlSetupセクションのみを心配しており、同じ変数を配列変数に読み込み、foreachを各行から変数uconfigvalに渡して各変数に代入しようとしています。 – Jyothi

答えて

0

あなたが投稿したノード<CommonConfig>を持っていないので、$uConfigFile = $Config.CommonConfig.SQLSetupは空の結果を生み出すサンプルXML。また、switchステートメントの変数と条件は完全にオフです。

あなたが実際にやりたいことは、このようなものである:(おそらくより良い)

foreach ($node in $xmlData.SelectNodes('/Install-Plan/SQLSetup/*')) { 
    switch ($node.Name) { 
     'SqlServerName' { $uSQL_SERVER_NAME = $node.InnerText.Trim() } 
     'SqlVersion' { $uSQLVERSION = $node.InnerText.Trim() } 
     ... 
    } 
} 

またはハッシュテーブルではなく、個々の変数を埋める:

$cfg = @{} 
foreach ($node in $xmlData.SelectNodes('/Install-Plan/SQLSetup/*')) { 
    $cfg[$node.Name] = $node.InnerText.Trim() 
} 
関連する問題