需要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都是唯一的,每个建筑可能没有或有很多人居住。所以我不知道如何拉住乘客。
如有任何帮助,我们将不胜感激。
在我看来,你想从一个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")
}