需要LINQ to XML深度解析帮助

本文关键字:帮助 深度 XML LINQ to 需要 | 更新日期: 2023-09-27 18:21:22

我是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(比如第一个风险ID"123456")选择给定的建筑时,如何吸引"居住者"。因此,如果用户选择了这座建筑,它会出去抓住每个居住者,为一个居住者类补水,并将该类添加到居住者列表中,然后我将其绑定到另一个列表框。

到目前为止,我所尝试的一切都在试图抓住乘客方面取得了糟糕的结果。我知道这一定是导航问题,但我似乎无法以返回任何有用信息的方式构建查询。每个风险ID都是唯一的,每个建筑可能没有或有很多人居住。所以我不知道如何拉住乘客。

如有任何帮助,我们将不胜感激。

需要LINQ to XML深度解析帮助

在我看来,你想从一个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")
    }