2009-07-22 6 views
0

Ich habe die folgende XML-Datei und ich möchte den Wert baseAddress ausdrucken, dann den Wert ändern und Update in die gleiche XML-Datei schreiben.XPATH-Problem in C# und PowerShell

Mein Problem ist die Verwendung der folgenden Skripts in PowerShell zu manipulieren, und scheint der zugehörige Wert konnte nicht abgerufen werden. Ich denke, der Grund könnte sein, dass dort ein Zeichen steht. im Elementnamen "system.serviceModel", welche PowerShell denkt ich möchte serviceModel Sub-Element unter System abrufen? Irgendwelche Ideen, wie man den korrekten Wert für baseAddress erhält?

$FooConfig = [xml](get-content .\Foo.exe.config -ErrorAction:stop) 
FooConfig.configuration.system.serviceModel.services.service.host.baseAddress 

<configuration> 
    <system.serviceModel> 
    <services> 
     <service name="FooImpl" behaviorConfiguration="mexServiceBehavior"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:9090/Foo" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    </system.serviceModel> 
</configuration> 

Vielen Dank im Voraus, George

+1

Hallo, George, Welche Version von PowerShell? –

+0

1.0, irgendwelche Ideen? – George2

Antwort

3

Wenn Sie Anführungszeichen um die Elementnamen mit einem put "" Du kannst es bekommen.

Verwendung

$FooConfig.configuration."system.serviceModel".services.service.host.baseAddress

+0

Danke Andy, ich habe die Lösung, $ FooConfig.configuration. "System.serviceModel" .services.service.host.baseAddresses.add.baseaddress – George2

1

In einigen Fällen ist es einfacher, nur XPath und das XML-API zum Beispiel verwenden:

PS> $FooConfig.SelectSingleNode('//add[@baseAddress]').baseAddress = 'foo' 
PS> $FooConfig.SelectSingleNode('//add[@baseAddress]').baseAddress 
foo 

gegen:

PS> $xml.configuration.'system.serviceModel'.services.service.host.baseaddresses.add.baseaddress = 'foo' 
PS> $xml.configuration.'system.serviceModel'.services.service.host.baseaddresses.add.baseaddress 
foo