Я новичок в LINQ to XML, и я изучаю учебные пособия, но я не нашел того, у которого есть достаточная глубина, чтобы завести меня за мой блок. В моем случае я ударил нашего поставщика для получения информации по данному адресу. Существует вероятность того, что адрес не будет точным совпадением, поэтому они отправят мне XML-файл с возможными адресами.LINQ to 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
};
Это дает мне все здания, которые мне нужны вместе с их риска идентификаторов.
Теперь кикер - это то, как вытащить «обитателей», когда пользователь выбирает данное здание на основе идентификатора риска, - первый идентификатор риска «123456». Поэтому, если пользователь выбирает это здание, он выйдет и захватит каждого жильца, увлажняющего класс-обитатель, и добавит этот класс в список людей, которые затем привяжут к другому списку.
Все, что я пробовал до сих пор, имел плохие результаты, просто пытаясь достать пассажиров. Я знаю, что это должно быть вопросом навигации, но я не могу построить запрос таким образом, чтобы он возвращал что-нибудь полезное. Каждый идентификатор риска уникален, и каждое здание не может иметь ни одного, ни большого количества пассажиров. Поэтому я теряюсь в том, как тянуть оккупантов.
Любая помощь будет оценена по достоинству.
Я воспринимаю Вселенную как одно уравнение, и это так просто. Ничего себе, это просто и прекрасно работает (с небольшим количеством настроек, чтобы защитить невиновность (riskID на самом деле является строкой и нуждается в защите). Мне пришлось немного переместиться по цепочке и изменить ссылку «POS-ADDR» на быть в XDocument.Descendants («POS-ADDR»), в этот момент был обнаружен правильный строительный блок, а затем у меня были только жильцы для данного RiskID, поскольку данный фрагмент был очень маленьким фрагментом XML-ответа. Спасибо Tons! !!! –
Есть причина, по которой я использовал 'Elements()' вместо 'Descendants()'. Я думаю, что лучше указать, где именно в документе искать. Это не только эффективнее, но и яснее что именно происходит. Если у вас есть только корневой элемент, вы можете использовать цепочку вызовов для 'Element()'. – svick