LINQ to XML Deep Parsing需要帮助

时间:2012-01-24 19:35:54

标签: c# xml linq linq-to-xml

我是LINQ to XML的新手,我一直在寻找教程,但我没有找到一个足以让我超越我的块的深度。就我而言,我找到了我们的供应商,以获取有关给定地址的信息。地址可能不是完全匹配的,因此他们会将包含可能地址的XML文件发回给我。

以下是来自地址查询的多个地址列表的给定XML块:

    <POSSIBLE-ADDRESSES>
              <POS-ADDR>
                <BUILDING>
                  <Street>1905 W HENDERSON RD                                      </Street>
                  <City>COLUMBUS                      </City>
                  <RiskID>123456</RiskID>
                </BUILDING>
                <OCCUPANTS>
                  <OCCUP>
                    <ID>010</ID>
                    <Desc>MC DONALD'S RESTAURANT (1S)        </Desc>
                  </OCCUP>
                  <OCCUP>
                    <ID>015</ID>
                    <Desc>MC DONALD'S RESTAURANT             </Desc>
                  </OCCUP>
                </OCCUPANTS>
              </POS-ADDR>
              <POS-ADDR>
                <BUILDING>
                  <Street>1821 HENDERSON RD                                        </Street>
                  <City>UPPER ARLINGTON               </City>
                  <RiskID>1234567</RiskID>
                </BUILDING>
                <OCCUPANTS>
                  <OCCUP>
                    <ID>010</ID>
                    <Desc>ARLINGTON SQUARE SHOPPING CTR (1S) </Desc>
                  </OCCUP>
                  <OCCUP>
                    <ID>015</ID>
                    <Desc>1821 SWAN DRY CLNG                 </Desc>
                  </OCCUP>
                  <OCCUP>
                    <ID>020</ID>
                    <Desc>4681 ALEX'S BISTRO ON REED/REST    </Desc>
                  </OCCUP>
                  <OCCUP>
                    <ID>025</ID>
                    <Desc>4687-93 BLUMEN GARTEN              </Desc>
                  </OCCUP>
                  <OCCUP>
                    <ID>030</ID>
                    <Desc>4697 BLIMPIE/SANDWICH SHOP         </Desc>
                  </OCCUP>
                </OCCUPANTS>
              </POS-ADDR>
            </POSSIBLE-ADDRESSES>

现在我所做的就是拉下所有建筑物(请注意,除此之外还有更多),然后将其绑定到列表框中 - 没有大问题:

    var qBuildings = from LOP in loaded.Descendants("BUILDING")
    select new
    {
      BuildingName = LOP.Element("Street").Value,
      RiskId = LOP.Element("RiskID").Value
    };

这为我提供了所需的所有建筑物及其风险ID。

现在,当用户根据风险ID选择第一个RiskID为“123456”时,如何拉动“占用者”。因此,如果用户选择了这个建筑物,它将会出去并抓住每个占用者为占用者提供水分并将该类添加到占用者列表中,然后我将绑定到另一个列表框。

到目前为止,我尝试过的所有事情都只是在尝试吸引住户时造成了不好的结果。我知道它必须是导航的问题,但我似乎无法以返回任何有用的方式构建查询。每个风险ID都是唯一的,每个建筑物都可以没有或多个占用者。所以我迷失了如何吸引住户。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

在我看来,你想从pos-addr中选择占用者,其建筑物具有特定的riskId。在LINQ-to-XML中,它可能如下所示:

var posAddr =
    (from pos in possibleAddresses.Elements("POS-ADDR")
     where (int)pos.Element("BUILDING").Element("RiskID") == riskIdToLookFor
     select pos)
    .Single();

var occupants =
    from o in posAddr.Element("OCCUPANTS").Elements("OCCUP")
    select new
    {
        Description = (string)o.Element("DESC")
    }