2017-11-15 48 views
0

Powershellを使用してSSISプロジェクトをインストールし、その環境を作成しています。 Project.Params XMLファイルからプロジェクトパラメータを読み込み、環境変数&の値を作成しています。次のコードスニペットを使用してパラメータ&の値を読み込むことはできますが、2番目のforeachループの代わりにSelectSingleNodeを使用したいと思います。私のXPathのスキルはそれに依存しません。ここ は、作業コードです:子ノードのPowershell SelectSingleNode

# load the Params file into memory 
[xml]$ParamsDoc = Get-Content -Path $ParamsFilePath 

# for each parameter in the Params file, add an environment variable if it doesn't already exist 
foreach ($Param in $ParamsDoc.Parameters.Parameter) 
{ 
    $ParamName = $Param.Name 

    # use the value in the Params file as the default value for the environment variable 
    foreach ($Prop in $Param.Properties.Property) 
    { 
     if ($Prop.Name -eq 'value') 
     { 
      $ParamValue = $Prop.InnerText 
      break 
     } 
    } 
    AddEnvironmentVariableIfMissing $ParamName $ParamValue 
} 

AddEnvironmentVariableIfMissingは、私が書いた別の関数です。さて、ここでは動作しないコードがあります:

# load the Params file into memory 
[xml]$ParamsDoc = Get-Content $ParamsFilePath 

$nsMgr = New-Object System.Xml.XmlNamespaceManager($ParamsDoc.NameTable) 
$nsMgr.AddNamespace("SSIS", $ParamsDoc.DocumentElement.NamespaceURI) 

foreach ($Param in $ParamsDoc.Parameters.Parameter) 
{ 
    $ParamName = $Param.Name 

    # NONE of these work! 
    $ParamValue = $Param.Properties.SelectSingleNode("SSIS:Property[@Name='Value']",$nsMgr) 
    $ParamValue = $Param.Properties.SelectSingleNode("Name[.='Value']",$nsMgr) 
    $ParamValue = $Param.Properties.SelectSingleNode("SSIS:Property/Name[.='Value']",$nsMgr) 
    $ParamValue = $Param.Properties.Property.SelectSingleNode("Name[.='Value']",$nsMgr) 
    $ParamValue = $Param.SelectSingleNode("SSIS:Properties/SSIS:Property[@Name='Value']",$nsMgr) 
    $ParamValue = $Param.SelectSingleNode("SSIS:Properties/SSIS:Property/Name[.='Value']",$nsMgr) 
    $ParamValue = $Param.SelectSingleNode("SSIS:Property[@Name='Value']",$nsMgr) 
    $ParamValue = $Param.SelectSingleNode("SSIS:Property/Name[.='Value']",$nsMgr) 

    AddEnvironmentVariableIfMissing $ParamName $ParamValue 
} 

名前= '値'の子ノードを取得する正しいXPath構文は何ですか?

ここでSSIS Project.paramsのサンプルが

<?xml version="1.0"?> 
<SSIS:Parameters xmlns:SSIS="www.microsoft.com/SqlServer/SSIS"> 
    <SSIS:Parameter 
    SSIS:Name="Client"> 
    <SSIS:Properties> 
     <SSIS:Property 
     SSIS:Name="ID">{144b0266-9e94-4821-bb68-f020436d5df5}</SSIS:Property> 
     <SSIS:Property 
     SSIS:Name="CreationName"></SSIS:Property> 
     <SSIS:Property 
     SSIS:Name="Description"></SSIS:Property> 
     <SSIS:Property 
     SSIS:Name="IncludeInDebugDump">0</SSIS:Property> 
     <SSIS:Property 
     SSIS:Name="Required">0</SSIS:Property> 
     <SSIS:Property 
     SSIS:Name="Sensitive">0</SSIS:Property> 
     <SSIS:Property 
     SSIS:Name="Value">sampleclient</SSIS:Property> 
     <SSIS:Property 
     SSIS:Name="DataType">18</SSIS:Property> 
    </SSIS:Properties> 
    </SSIS:Parameter> 
    <SSIS:Parameter 
    SSIS:Name="MSSQLServer"> 
    <SSIS:Properties> 
     <SSIS:Property 
     SSIS:Name="ID">{b4e6c5e1-ef85-4df3-b2dc-db37971d081d}</SSIS:Property> 
     <SSIS:Property 
     SSIS:Name="CreationName"></SSIS:Property> 
     <SSIS:Property 
     SSIS:Name="Description"></SSIS:Property> 
     <SSIS:Property 
     SSIS:Name="IncludeInDebugDump">0</SSIS:Property> 
     <SSIS:Property 
     SSIS:Name="Required">0</SSIS:Property> 
     <SSIS:Property 
     SSIS:Name="Sensitive">0</SSIS:Property> 
     <SSIS:Property 
     SSIS:Name="Value">MSSQLSERVER</SSIS:Property> 
     <SSIS:Property 
     SSIS:Name="DataType">18</SSIS:Property> 
    </SSIS:Properties> 
    </SSIS:Parameter> 
</SSIS:Parameters> 
+1

入力.xmlファイルを共有できますか?親と少なくともあなたが選択したいノードのサンプル? – FoxDeploy

+0

ファイルサンプルを追加しました –

+2

XPathクエリで 'SSIS'を使う必要があります。 – PetSerAl

答えて

1

ファイルですのでPetSerAIは正しい考えを持っていました。ネームスペースは、Name要素を含むXPath構文内にある必要がありました。動作する2つの構文は次のとおりです。

$ParamValue = $Param.Properties.SelectSingleNode("SSIS:Property[@SSIS:Name='Value']",$nsMgr) 
    $ParamValue = $Param.SelectSingleNode("SSIS:Properties/SSIS:Property[@SSIS:Name='Value']",$nsMgr) 

ありがとう、PetSerAI!

+0

私はxPathをペーストするためにここに来ていました。同じ事を思いついたようです。// SSIS:Property [@SSIS:Name = 'Value']/text() ':) – FoxDeploy

関連する問題