XML против JSON первый
, если вы собираетесь использовать API для выполнения некоторых запросов AJAX (например, запрос к API как пользователь нажимает ссылку/изображение, и вы, например, хотите изменить цвет этой ссылки, ведь она сообщит пользователю, что это нормально или нет ... идите в JSON, потому что вам не нужно разбирать XML)
если вы все делаете «кусты», и вам нужно только представить данные, которые обрабатываются в коде позади, а затем использовать XML.
Простое использование, с WebClient объекта
private string GetDocument(string myPin) {
String url = String.Format("http://someservice.com/name_query.php?pincode={0}", myPin);
WebClient client = new WebClient();
client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0;)"); // pass as Internet Explorer 7.0
Stream data = client.OpenRead(url);
StreamReader reader = new StreamReader(data);
s = reader.ReadToEnd();
data.Close();
reader.Close();
return s;
}
в это время, у вас есть весь XML, который вы получили от API в строке, все, что вам теперь нужно обработать XML, например, , как:
себе представить, что выход представляет собой XML-документ, как:
<Hit dbId="400179221" systemId="115">
<WorksiteDbId>200105072</WorksiteDbId>
<Subscribed>false</Subscribed>
<FirstName>Klaus Holse</FirstName>
<LastName>Andersen</LastName>
<Status>Active</Status>
<MainJobTitle>CEO (Managing Director, General Manager, Owner)</MainJobTitle>
<WorksiteName>Microsoft Development Center Copenhagen ApS </WorksiteName>
<Department></Department>
<Address></Address>
<Zipcode></Zipcode>
<City></City>
<WorksitePhone></WorksitePhone>
<TypeCode>TY10</TypeCode>
<WorksiteStatus>Active</WorksiteStatus>
</Hit>
метод для обработки информации о документе это что-то вроде:
private void processDocument(string myPin) {
String xml = GetDocument(myPin);
XmlTextReader reader = new XmlTextReader(new StringReader(xml));
XmlDocument document = new XmlDocument();
document.Load(reader);
XmlNodeList list = document.SelectNodes("/XMLNode/XMLSubNode");
foreach (XmlNode node in list) // loop through all nodes
{
foreach (XmlAttribute att in node.Attributes) // loop through all attributes
{
switch (att.Name.ToLower())
{
case "dbid": myClass.DbID = Int32.Parse(att.InnerText); break;
case "systemid": myClass.SystemID = Int32.Parse(att.InnerText); break;
default: break;
}
}
foreach (XmlNode subnode in node.ChildNodes) // loop through all subnodes
{
switch (subnode.Name.ToLower()) // check what node has what
{
case "subscribed": myClass.Subscribed = bool.Parse(subnode.InnerText); break;
case "firstname": myClass.Firstname = subnode.InnerText; break;
case "lastname": myClass.Lastname = subnode.InnerText; break;
case "status": myClass.Status = subnode.InnerText; break;
...
}
}
}
}
вы будете иметь MyCLASS заполнены со всеми значениями, которые были возвращены в API ...
, как вы уже в первой строке ... это для новичка :) и это хороший способ понять концепцию получения и использования данных XML ... после того, как вы поймете эту часть, тогда вы легко перейдете на LINQ2XML :)
Надеюсь, это поможет ...
добавил
, потому что я видел только теперь, когда у вас есть выход XML, здесь метод processDocument использовать точную XML
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Address>
<Country>US</Country>
<City>Seattle</City>
<Result>Done</Result>
</Address>
метод:
private void processDocument(string myPin) {
String xml = GetDocument(myPin);
XmlTextReader reader = new XmlTextReader(new StringReader(xml));
XmlDocument document = new XmlDocument();
document.Load(reader);
XmlNodeList list = document.SelectNodes("/Address");
foreach (XmlNode node in list) // loop through all nodes
{
foreach (XmlNode subnode in node.ChildNodes) // loop through all subnodes
{
switch (subnode.Name.ToLower()) // check what node has what
{
case "country": myClass.Country =subnode.InnerText; break;
case "city": myClass.City= subnode.InnerText; break;
case "result": myClass.Result = subnode.InnerText; break;
}
}
}
}
не забудьте проверить наличие ошибок, например, передать неправильный набор данных, чтобы вы могли корректно обрабатывать ошибку.
:-)
спасибо, что так хорошо объяснили .. В реальном приложении, что бы вы использовали, если бы вы это сделали (продвинутый подход) – Musa
в продукте для продажи от компании, в которой я работаю, я использую только что описанный мной XML-подход :) будущие версии, вероятно, будут использовать Linq2Xml, но никогда JSON не вызывает использования WebService, не выводит JSON, если бы у меня был такой шанс, я бы использовал его, например, когда я показываю сетку результатов для части PAGING ... работает так же быстро и быстро, с LIN2XML это будет немного быстрее, но сэкономить несколько строк кода. сначала попробуйте простейший. – balexandre
спасибо тонну balexandre !! – Musa