2013-01-25 47 views
0

我有一個只包含幾個變量的.xslt文件。我需要使用Powershell更新其中兩個。該文件看起來像:使用Powershell更新.xslt文件中的xsl:變量

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:variable name="VarA" select="this data stays the same" /> 
    <xsl:variable name="VarB" select="this data also stays the same" /> 

    <xsl:variable name="ChangeMe_1" select="data to be changed" /> 
    <xsl:variable name="ChangeMe_2" select="more data to be changed" /> 

</xsl:stylesheet> 

我需要更新名爲ChangeMe_1和ChangeMe_2到傳遞到PowerShell腳本參數變量的選擇值。我是Powershell的新手,我發現了很多解析XML文件的資源,但是這個xslt只是不同而已,它讓我感到困惑。

此外,這需要在文件夾層次具有相同名稱的每.xslt文件來完成,因此,如果任何人都可以點我在正確的方向,我會非常感激。

回答

1

這樣的事情,我建議在測試文件夾中,以測試它之前在生產環境中運行它:

param ($path, $filename, $newvalue) 

$files = dir $path -filter $filename -Recurse 
foreach ($file in $files) 
{ 
[xml]$xml= gc $file.fullname 
$xml.stylesheet.variable | ? { $_.name -match 'ChangeMe_[1|2]' } | % {$_.select= $newvalue } 
$xml.Save($file.fullname) 
} 
+0

完美,完全沒有工作。謝謝。 – BDW

2

把你的文件作爲XML:

[xml][email protected](gc C:\temp\test.xslt) 
$t.stylesheet.variable | ?{$_.name -like "ChangeMe_1"}|%{$_.select="New Value"} 
$t.Save("newname.xslt") 
gc .\newname.xslt 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:variable name="VarA" select="this data stays the same" /> 
    <xsl:variable name="VarB" select="this data also stays the same" /> 
    <xsl:variable name="ChangeMe_1" select="NewValue" /> 
    <xsl:variable name="ChangeMe_2" select="more data to be changed" /> 
</xsl:stylesheet> 
+0

保存似乎不起作用 - 最後一行失敗,並告訴我它找不到「newname.xslt」,事實上,它不存在。 – BDW

+0

嘗試指定完整路徑'$ t.save(「c:\ temp \ newfile.xslt」)'我已經測試了V2和V3 –

+0

Yay!這工作,但最終我需要的路徑是動態的 - 這需要在整個文件夾層次結構上運行,使用相同的名稱更新層次結構中任何位置的所有文件,並且根文件夾也將更改。有任何想法嗎? – BDW