[英]parse MapQuest XML response
這是返回的xml:
<IncidentsResponse>
<Incidents>
<Incident>
<id>920959670</id>
<type>1</type>
<severity>3</severity>
<eventCode>701</eventCode>
<lat>35.91411</lat>
<lng>-86.82417</lng>
<startTime>2014-03-01T01:00:00.000-05:00</startTime>
<endTime>2016-06-16T00:59:00.000-04:00</endTime>
<shortDesc>
I-65 : Maintenance work between Exit 59 TN-840 and Exit 65 TN-96
</shortDesc>
<fullDesc>
Intermittent lane closures due to maintenance work on I-65 both ways between Exit 59 TN-840 and Exit 65 TN-96.
</fullDesc>
<delayFromTypical>0.0</delayFromTypical>
<delayFromFreeFlow>0.0</delayFromFreeFlow>
<distance>12.09</distance>
<iconURL>https://api.mqcdn.com/mqtraffic/const_mod.png</iconURL>
</Incident>
</Incidents>
</IncidentsResponse>
我想將其提取為兩個簡短的描述符,它們是從shortDesc和嚴重性獲得的。 到目前為止,這是我的C#嘗試:
string[] incidentsDscrp = { };
string[] severity = { };
int count = 0;
XDocument doc = XDocument.Parse(traffData);
foreach (var incidents in doc.Descendants("Incident"))
{
incidentsDscrp[count] = incidents.Element("shortDesc").Value;
severity[count] = incidents.Element("severity").Value;
count++;
}
trafficLabel.Text = "";
for (int a = 0; a < incidentsDscrp.Length; a++)
{
trafficLabel.Text += incidentsDscrp[a];
trafficLabel.Text += severity[a];
}
基本上,我想將事件的描述存儲在eventssDscrp數組中,並將嚴重性級別存儲在嚴重性數組中,然后將它們作為文本添加到winforms標簽中。
編輯:我的錯誤是索引是在數組的邊界之外
severity[count] = incidents.Element("severity").value;
線
使用以下內容解析和創建標簽-
from c in trafficData.Descendants("Incident")
select new
{
ShortDescription = c.Element("shortDesc").Value,
Severity = c.Element("severity").Value
}).Aggregate((a,b) => a.ShortDescription +": " + a.Severity +", "
+ b.ShortDescription +": " + b.Severity);
不好意思,但您做錯了。
首先,存儲這樣的數據(並行收集)是一個非常糟糕的主意。 您應該閱讀Jon Skeet的以下博客文章: 反模式:並行集合 。
現在,解決您的問題。 這是一些LINQ to XML查詢,它使您可以從XML文檔中獲得所需的一切:
var items = from i in xDoc.Root.Element("Incidents").Elements("Incident")
select new
{
ShortDescription = (string)i.Element("shortDesc"),
Severity = (int)i.Element("severity")
};
您可以使用String.Join
將所有項目連接到一個字符串中:
var text = String.Join(",", items.Select(x => string.Format("{0}: {1}", x.ShortDescription.Trim(), x.Severity.ToString())));
對於您的示例文檔, text
的值為:
I-65:在59 TN-840出口和65 TN-96出口之間的維護工作:3
更改格式字符串的分隔符以獲得所需的結果。 現在,您可以將其分配給標簽:
trafficLabel.Text = text;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.