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