2014-01-07 5 views
0

Я пытаюсь изменить веб-сайт, который был создан другими веб-разработчиками.C# XML Выберите несколько узлов

Данная деталь читает файл данных XML и отбрасывает данные для отображения на карте Google.

У них есть строка кода;

string path = Server.MapPath(OutageXmlVirtualPath); //path to XML file 

OutageData outages = XMLUtil.Deserialize<OutageData>(path); 

Outage outage = outages.Outages.FirstOrDefault(o => o.PostCodes.Any(p => FoundOutagePostcode(p)) && !o.Planned); 

Это переносит первую запись в XML, которая соответствует почтовому индексу, который пользователь ввел в текстовое поле. (lastOrDefault работает также)

Проблема с этим однако заключается в том, что почтовый индекс, который они вводят, может появляться более одного раза. В другом узле XML. Так что я хочу сделать, это отбросить все записи в соответствующем XML. Не только первый. Я вижу, что есть методы «Все» и «SelectMany», но не знаю, как их реализовать в моем коде.

Я бы счел себя полным новичком в этой области.

Если кто-то может оказать любую помощь, которая была бы весьма признательна.

С наилучшими пожеланиями,

Chris

образец XML

<?xml version="1.0" encoding="utf-16"?> 
<OutageData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <TimeStamp>2013-12-16T06:38:00.1706983+00:00</TimeStamp> 
    <Outages> 
    <Outage> 
     <Region>South West</Region> 
     <IncidentID>INCD-83651-m</IncidentID> 
     <ConfirmedOff>1</ConfirmedOff> 
     <PredictedOff>0</PredictedOff> 
     <Restored>0</Restored> 
     <Status>In Progress</Status> 
     <Planned>false</Planned> 
     <StartTime>2013-12-14T18:03:00</StartTime> 
     <ETR>2013-12-16T12:00:00</ETR> 
     <Voltage>LV</Voltage> 
     <PostCodes> 
     <string>PL1 4RL</string> 
     <string>PL2 1AF</string> 
     <string>PL2 1AG</string> 
     <string>PL2 1AH</string> 
     </PostCodes> 
     <Sensitive>1</Sensitive> 
    </Outage> 
    <Outage> 
     <Region>West Midlands</Region> 
     <IncidentID>INCD-12499-I</IncidentID> 
     <ConfirmedOff>0</ConfirmedOff> 
     <PredictedOff>0</PredictedOff> 
     <Restored>0</Restored> 
     <Status>In Progress</Status> 
     <Planned>true</Planned> 
     <StartTime>2013-12-13T10:00:00</StartTime> 
     <ETR xsi:nil="true" /> 
     <Voltage>HV</Voltage> 
     <PostCodes> 
     <string>SY7 9AX</string> 
     <string>SY7 9AY</string> 
     <string>SY7 9AZ</string> 
     <string>SY7 9BE</string> 
     </PostCodes> 
     <Sensitive>0</Sensitive> 
    </Outage> 
    </Outages> 
</OutageData> 

ответ

1

просто пытаются использовать Where

var outagesFound = outages.Outages.Where(o => o.PostCodes.Any(p => FoundOutagePostcode(p)) && !o.Planned); 

, а затем вы можете перебирать outagesfound списка с помощью петли foreach

+0

'var' - это, конечно,' IEnumerable ', который вы затем можете сделать вокруг цикла foreach; –

Смежные вопросы