.SelectSingleNode w skrypcie Powershell za pomocą xPath nie działa na wyodrębnianie wartości z pliku web.config
Dobra, oto fragment mojego pliku web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<location path="." inheritInChildApplications="false">
<connectionStrings>
...
</connectionStrings>
</location>
<location path="." inheritInChildApplications="false">
<appSettings>
<!--IT Ops-->
<add key="SomeOtherKey" value="SomeOtherValue" />
<add key="SiteDomain" value="somedomain.com" />
<add key="SomeOtherKey" value="SomeOtherValue" />
....
</appSettings>
</location>
</configuration>
Próbuję znaleźć węzeł za pomocą xPath za pomocą Powershell. Kilka rzeczy do odnotowania na temat tego pliku XML:
istnieje wiele:
<location path="." inheritInChildApplications="false">
wartości w pliku xml. Otaczają inne węzły, takie jak ...
Mogę znaleźć i zastąpić wartości ciągu połączenia pomyślnie za pomocą tego skryptu
$WebConfigFile = Join-Path $destination Web.config
[xml]$WebConfigXml = Get-Content ($WebConfigFile)
$WebConfigXml.configuration.location[2].connectionStrings.add | % { $_.connectionString = $_.connectionString -replace "some value", $sqlServerName }
Ale kiedy idę zastąpić wartość add key = „SiteDomain” za pomocą tego skryptu:
$node = $WebConfigXml.configuration.location[3].appSettings.SelectSingleNode("add[@key = 'SiteDomain']")
$node.value = "someValue"
$WebConfigXml.Save($WebConfigFile)
to nie działa. Wartość $ node w tym przypadku zawiera pusty łańcuch.
Próbuję też po prostu odczytać węzeł w ten sposób:
$appSettingsSection = $WebConfigXml.configuration.location[3].appSettings;
$existingSiteDomain = $appSettingsSection.SelectSingleNode("add[@key='SiteDomain']")
Nadal otrzymuję pusty ciąg dla wartości $ existingSiteDomain.
Przejrzałem próbki przy użyciu SelectSingleNode i nie mogę tego zrozumieć. Nie jestem pewien, co robię źle.
Dzięki, Mike