2009-07-22 8 views
0

J'ai le fichier XML suivant et je veux imprimer la valeur baseAddress, puis changer la valeur et écrire update dans le même fichier XML.Problème XPATH en C# et PowerShell

Mon problème est que j'utilise les scripts suivants dans PowerShell pour manipuler, et semble que la valeur associée n'a pas pu être récupérée. Je pense que la raison peut être qu'il y a un signe '.' dans le nom d'élément "system.serviceModel", que PowerShell pense que je veux récupérer le sous-élément serviceModel sous le système? Des idées comment récupérer la valeur correcte pour baseAddress?

$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> 

merci à l'avance, George

+1

Salut, George, quelle version de PowerShell? –

+0

1.0, des idées? – George2

Répondre

3

Si vous mettez des guillemets autour du nom de l'élément avec un "" Tu peux l'avoir.

utilisation

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

+0

Merci Andy, j'ai la solution, $ FooConfig.configuration. "System.serviceModel" .services.service.host.baseAddresses.add.baseaddress – George2

1

Dans certains cas, il est plus facile à utiliser juste XPATH et l'API XML par exemple:

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

contre:

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