2

アプリケーションの構成ファイルとして機能するXSLファイルがあります。実際、これはXMLファイルであり、<xsl:Stylesheet>要素がラップされています。このファイルは次のように呼ばれ Config.xslます:

     <?xml version="1.0" encoding="UTF-8"?>
     <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"           xmlns="http://www.example.org/Config">
     <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"               standalone="yes" />
     <xsl:template match="/">
     <Config>
          <Test>somevalue</Test>
          <Test1>someothervalue</Test1>
     </Config>
     </xsl:template>
</xsl:stylesheet>

次に、動的に渡される要素の値を変更したいと思います。つまり、XPATHと値をキー名/値のペアとして含む別のXMLファイルがあります。以下はXMLファイルの内容ですProperties.xml

<?xml version="1.0" encoding="utf-8" ?>
<ConfigFiles>
<ConfigFile>
    <FileName>Config.xsl</FileName>
    <Keys>
        <Key Name="Config.Test" Value="newvalue" />
        <Key Name="Config.Test1" Value="newvalue1" />
    </Keys>
</ConfigFile>   
</ConfigFiles>

以下は、要素の値を更新していない私のPowerShellコードです。

$properties = [xml] (Get-Content Properties.xml)
$lstfiles = $properties.ConfigFiles.ConfigFile
foreach($file in $lstfiles)
{
  $configfilename = $file.FileName
  $filename = "C:\configs\configfilename"
  $testconfigfile = [xml] (Get-Content $filename)

  $lstKeys = $file.Keys.Key
  foreach($key in $lstKeys)
  {
    #When I debug the code, I was able to assign the value using the below code (Commented). However this is not dynamic
    #$testconfigfile.DocumentElement.LastChild.Config.Test = "newvalue"

    #Now if I try to pass the same values dynamically by reading them from properties.xml and assigning it using the below code it does not work
    $testconfigfile.DocumentElement.LastChild.$key.Name = $key.Value            
  }
  $testconfigfile.Save($filename)               
}
4

2 に答える 2

3

これはあなたのために働くはずです。property.xmlを次のように変更します

<?xml version="1.0" encoding="utf-8" ?>
<ConfigFiles>
<ConfigFile>
    <FileName>Config.xsl</FileName>
    <Keys>
        <Key Name="Test" Value="newvalue" />
        <Key Name="Test1" Value="newvalue1" />
    </Keys>
</ConfigFile>   
</ConfigFiles>

シェルスクリプトで以下の行を試してください、

$testconfigfile.DocumentElement.LastChild.Config.($key.Name) = $key.Value
于 2012-10-28T23:51:23.207 に答える
1
Alternatively...


<?xml version="1.0" encoding="utf-8" ?>
<ConfigFiles>
<ConfigFile>
    <FileName>Config.xsl</FileName>
    <Keys>
        <Key Name1="Config"  Name2='Test' Value="newvalue" />
        <Key Name1="Config"  Name2='Test1' Value="newvalue1" />
    </Keys>
</ConfigFile>   
</ConfigFiles>


$testconfigfile.DocumentElement.LastChild.($key.Name1).($key.Name2) = $key.Value 
于 2012-10-28T23:56:40.147 に答える