2016-02-24 48 views
1

我有以下代碼,當服務只返回一個項目時效果很好......但在大多數情況下,它會返回很多項目。我似乎無法弄清楚如何對項目進行簡單的foreach。foreach從服務返回的XML字符串

DataReference.USZipSoapClient blah = new DataReference.USZipSoapClient("USZipSoap"); 
var results = blah.GetInfoByCity(tbCityName.Text).InnerXml; 

//Response.Write(results); 
XmlDocument docArticle = new XmlDocument(); 
docArticle.LoadXml(results); 

StringBuilder builder = new StringBuilder(); 

XmlNodeList nodeCity = docArticle.ChildNodes[0].SelectNodes("CITY"); 
XmlNodeList nodeState = docArticle.ChildNodes[0].SelectNodes("STATE"); 
XmlNodeList nodeZip = docArticle.ChildNodes[0].SelectNodes("ZIP"); 
XmlNodeList nodeAreaCode = docArticle.ChildNodes[0].SelectNodes("AREA_CODE"); 
XmlNodeList nodeTimeZone = docArticle.ChildNodes[0].SelectNodes("TIME_ZONE"); 

builder.Append(nodeCity[0].InnerText + "<br/>"); 
builder.Append(nodeState[0].InnerText + "<br/>"); 
builder.Append(nodeZip[0].InnerText + "<br/>"); 
builder.Append(nodeAreaCode[0].InnerText + "<br/>"); 
builder.Append(nodeTimeZone[0].InnerText + "<br/>"); 

lblCityName.Text = builder.ToString(); 

返回一個itme的數據看起來像這樣。正如我所提到的,然而大多數結果都帶回了許多項目,而不僅僅是一個。

<NewDataSet xmlns=""><Table><CITY>Marana</CITY><STATE>AZ</STATE><ZIP>85653</ZIP><AREA_CODE>520</AREA_CODE><TIME_ZONE>M</TIME_ZONE></Table></NewDataSet> 

任何幫助表示讚賞!

+0

一般情況下,你應該在你的問題的語言。這是C#嗎? –

回答

1

使用Linq To XML,它有一個XDocument類,它更容易比XmlDocument與該類工作。

在使用該類之前,您必須引用System.Xml.Linq並導入具有相同名稱的名稱空間。

隨着XDocument你可以寫下面的代碼:

var docArticle = XDocument.Parse(results); 
var results = docArticle.Element("NewDataSet").Elements().Select(elt => new 
{ 
    City = elt.Element("CITY") != null ? elt.Element("CITY").Value : string.Empty, 
    State = elt.Element("STATE") != null ? elt.Element("STATE").Value : string.Empty, 
    Zip = elt.Element("ZIP") != null ? elt.Element("ZIP").Value : string.Empty, 
    AreaCode = elt.Element("AREA_CODE") != null ? elt.Element("AREA_CODE").Value : string.Empty, 
    TimeZone = elt.Element("TIME_ZONE") != null ? elt.Element("TIME_ZONE").Value : string.Empty, 
}).ToList(); 

// Here do what you want with the results variable