2013-07-18 5 views
1

J'essaie d'utiliser la notation des points pour trouver la liste des éléments Webs dans ce XML:notation Dot Aucun résultat

<Databases> 
    <Database SiteCount="2" Name="MyDB" DataSource="BLAHDEV"> 
     <Site Id="72affdff-b0a9-404e-a000-08cfc1c2828a" OwnerLogin="Blah\Blah" InSiteMap="True"> 
      <Webs Count="1"> 
       <Web Id="5fb7df63-0ab3-4cb2-88de-1a94ceda0fbf" Url="/people/me/blah" LanguageId="1033" TemplateName="SPSPERS#0" TemplateId="21" /> 
      </Webs> 
     </Site> 
     <Site Id="9ae7dd88-cdd9-4d22-b6af-2185ddb22994" OwnerLogin="Blah\Blah" InSiteMap="True"> 
      <Webs Count="1"> 
       <Web Id="45d2d002-4e7d-4f22-9cd2-c93fdd49daab" Url="/people/me/blah2" LanguageId="1033" TemplateName="SPSPERS#0" TemplateId="21" /> 
      </Webs> 
     </Site> 
    </Database> 
</Databases> 

je puis le charger dans Powershell:

[xml]$xml = Get-Content MyXMLFile.xml 

Interrogation en utilisant la notation de points fonctionne jusqu'à l'élément du site:

PS> $xml 
Databases 
--------- 
Databases 

PS> $xml.Databases 
Database 
-------- 
Database 

PS> $xml.Databases.Database 
SiteCount    Name    DataSource  Site 
---------    ----    ----------  ---- 
2      MyDB    BLAHDEV   {Site, Site} 

PS> $xml.Databases.Database.Site 
Id       OwnerLogin  InSiteMap     Webs 
--       ----------  ---------     ---- 
72affdff-b0a9-404e-a000-08... Blah\Blah   True      Webs 
9ae7dd88-cdd9-4d22-b6af-21... Blah\Blah   True      Webs 

Cependant lorsque je tente d'obtenir les éléments Webs, aucun résultat ne retou rned:

PS> $xml.Databases.Database.Site.Webs 
PS> 

Y at-il une raison pour laquelle je ne trouve pas les éléments Webs? Est-ce parce qu'il y a plusieurs éléments du site ou pour une autre raison?

Répondre

4

$xml.Databases.Database.Site est une collection, vous aurez besoin de transporter par pipeline:

$xml.Databases.Database.Site | Select -Expand Webs 

Ou utiliser XPath (modifier: SelectNodes est pour chaque élément, et non la collection)

...Site | ForEach { $_.SelectNodes('Webs') } #or something similar 

ou en boucle

...Site | ForEach { $_.Webs } 
+0

Merci, le premier et le dernier travail de suggestion. La seconde suggestion renvoie "L'appel de méthode a échoué car [System.Object []] ne contient pas de méthode nommée" SelectNodes "." –

+0

Oh, c'est vrai, c'est une collection donc la méthode SelectNodes devrait être dans un ForEach, ou une propriété calculée – Eris

+0

Rappelez-vous aussi que vous devrez faire la même chose si vous ajoutez un autre nœud 'Database'. – Eris