Как получить дочерние узлы, если я передаю идентификатор родительского узла в XML в Silverlight? - PullRequest
1 голос
/ 06 сентября 2010

У меня есть XML в следующем формате, и мне нужно получить идентификатор и имя всех SubEntity, когда я передаю ParentEntityId. Это должно быть сделано в серебряном свете.

<Treeview>
    <ParentEntity ParentEntityId="1" ParentEntityName="P1">
        <Facility FacilityId="F1" FacilityName="F1">
            <Category CategoryId="C1" CategoryName="C1"/>             
            <Category CategoryId="C2" CategoryName="C2" >
                <Activity ActivityId="A1" ActivityName="A1" /> 
            </Category>
        </Facility>
        <Facility FacilityId="F2" FacilityName="F2">
            <Category CategoryId="C1" CategoryName="C1">
                <Activity ActivityId="A2" ActivityName="A2" /> 
                <Activity ActivityId="A3" ActivityName="A3" />   
            </Category>
        </Facility>
        <SubEntity SubEntityId="S1" SubEntityName="S1">
            <SubEntity SubEntityId="S2" SubEntityName="S2"/> 
        </SubEntity>
        <SubEntity SubEntityId="S3" SubEntityName="S3">
            <SubEntity SubEntityId="S4" SubEntityName="S4">
                <Facility FacilityId="F3" FacilityName="F3">
                    <Category CategoryId="C1" CategoryName="C1 >
                        <Activity ActivityId="A1" ActivityName="A1" />   
                    </Category>
                </Facility>
            </SubEntity>
            <SubEntity SubEntityId="S5" SubEntityName="S5">
                <Facility FacilityId="F5" FacilityName="F5">
                    <Category CategoryId="C1" CategoryName="C1" />
                    <Category CategoryId="C2" CategoryName="C2"/>                
                </Facility>
            </SubEntity>
            <SubEntity SubEntityId="S6" SubEntityName="S6" />
        </SubEntity>
    </ParentEntity>
    <ParentEntity ParentEntityId="2" ParentEntityName="P2">
        <Facility FacilityId="F1" FacilityName="F1">
            <Category CategoryId="C1" CategoryName="C1"/>                   
        </Facility>
        <SubEntity SubEntityId="S7" SubEntityName="S7" />
    </ParentEntity>
</Treeview>

Если я передам свой parentEntityId = 1, мне нужен вывод S1, S2, S3, S4, S5, S6.

Спасибо заранее, Sunitha

1 Ответ

0 голосов
/ 06 сентября 2010

Использование LINQ to XML

  foreach(XElement subEntity in doc.Root.Elements("ParentEntity")
       .First(elem => elem.Attribute("ParentEntityID").Value == "1")
       .Descendents("SubEntity") )
  {
     // Do stuff with each SubEntity e.g.:-
     string name = subEntity.Attribute("SubEntityName");
  }

Альтернативой, если вы используете Silverlight 4, будет вместо этого использовать XPath. Вам нужно добавить System.Xml.XPath.dll в ваши ссылки. В этом случае вышеуказанный цикл становится: -

  foreach(XElement subEntity in doc.Root
      .XPathSelectElements("ParentEntity[ParentEntityId='1']//SubEntity" )
  {
     // Do stuff with each SubEntity e.g.:-
     string name = subEntity.Attribute("SubEntityName");
  }

Кстати, вы не в своем реальном XML-префиксе именуете все атрибуты с именами элементов, в которые они помещены? Например, почему «SubEntityName», а не просто «Имя»?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...