foreach从服务返回的XML字符串

时间:2016-02-24 18:33:36

标签: xml parsing

我有以下代码,当服务只返回一个项目时效果很好......但在大多数情况下,它会返回很多项目。我似乎无法弄清楚如何在项目上做一个简单的foreach。

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>

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

使用XDocument类附带的 Linq To XML ,使用该类比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