2014-01-07 101 views
0

我在嘗試修改其他Web開發人員構建的網站。C#XML選擇多個節點

有問題的部分讀取XML數據文件並將數據拉回到Google Map上顯示。

他們有一行代碼;

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中的所有記錄。不只是第一個。我可以看到有'All'和'SelectMany'方法,但不知道如何在代碼中實現這些方法。

我認爲自己是這方面的完全新手。

如果任何人能夠借出任何幫助,將不勝感激。

親切的問候,

克里斯

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'循環;) –