0

我有一个 .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 文件中完成,所以如果有人能指出我正确的方向,我将非常感激。

4

2 回答 2

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>
于 2013-01-25T14:28:16.967 回答
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)
}
于 2013-01-25T14:19:24.237 回答