2013-07-18 4 views
1

Я пытаюсь использовать точечную нотацию, чтобы найти список Полотна элементов в этом XML:Dot нотации не возвращает никаких результатов

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

я затем загрузить его в PowerShell:

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

запрашивая с помощью точка обозначение не работает до тех пор элемент сайта:

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 

Однако, когда я пытаюсь получить элементы перемычек, никаких результатов не являются RETU rned:

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

Есть ли причина, по которой я не могу найти элементы в Интернете? Это потому, что есть несколько элементов сайта или какая-то другая причина?

ответ

4

$xml.Databases.Database.Site является сбор, вам необходимо трубопровода это:

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

Или использовать XPath (редактирование: SelectNodes для каждого элемента, а не сбор)

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

Или кольцую

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

Спасибо, первое и последнее предложение. Второе предложение возвращает «Ошибка вызова метода, потому что [System.Object []] не содержит метода с именем« SelectNodes ».» –

+0

О, это так, это коллекция, поэтому метод SelectNodes должен быть в ForEach или вычисленном свойстве – Eris

+0

Также помните, что вам нужно будет сделать то же самое, если вы добавите еще один узел «База данных». – Eris

Смежные вопросы