使用Powershell更新.xslt文件中的xsl:变量

时间:2013-01-25 14:06:32

标签: powershell

我有一个.xslt文件,里面只有几个变量。我需要使用Powershell更新其中两个。该文件看起来像:

 <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文件中完成,因此如果有人能指出我正确的方向,我非常感谢。

2 个答案:

答案 0 :(得分:2)

将您的文件视为xml:

[xml]$t=@(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>

答案 1 :(得分: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)
}