2009-05-26 2 views
1

Это новичок, поэтому будьте добры ко мне :)Как извлечь данные из онлайн-API?

Как я могу использовать php API в ASP.NET? Этот API возвращает XML-документ. Он также способен возвращать JSON.

Вывод показан ниже

XML

<?xml version="1.0" encoding="UTF-8"?> 

<Address> 

     <Country>US</Country> 

     <City>Seattle</City> 

     <Result>Done</Result> 

</Address> 

JSON

{ 

"CountryCode" : "US", 

"City" : "Seattle", 

"Result" : "Done" 

} 

Для например: есть услуга http://someservice.com/name_query.php?pincode=, которая принимает пин-код и возвращает документ XML.

Могу ли я использовать LINQtoXML и использовать его. Пример использования XML и один с JSON будет очень полезен.

ответ

6

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; 
      } 
     } 
    } 
} 

не забудьте проверить наличие ошибок, например, передать неправильный набор данных, чтобы вы могли корректно обрабатывать ошибку.

:-)

+0

спасибо, что так хорошо объяснили .. В реальном приложении, что бы вы использовали, если бы вы это сделали (продвинутый подход) – Musa

+0

в продукте для продажи от компании, в которой я работаю, я использую только что описанный мной XML-подход :) будущие версии, вероятно, будут использовать Linq2Xml, но никогда JSON не вызывает использования WebService, не выводит JSON, если бы у меня был такой шанс, я бы использовал его, например, когда я показываю сетку результатов для части PAGING ... работает так же быстро и быстро, с LIN2XML это будет немного быстрее, но сэкономить несколько строк кода. сначала попробуйте простейший. – balexandre

+0

спасибо тонну balexandre !! – Musa

3

Вы можете использовать LINQtoXML, вы можете использовать XMLDom. На каком языке вы будете использовать C# или VB.NET?

один из способов сделать это в LINQ к XML:

var XML = XElement.Parse(xmlSourceString); 
     var query = from a in XML.Descendants("addressXML") 
        select new 
           { 
            Country = a.Element("Country").Value, 
            City = a.Element("City").Value 
           }; 
+0

благодаря david..how я могу получить xmlSourceString от URL, который возвращает XML или JSON? – Musa

+1

Вы должны установить переменную xmlSourceString в XML, возвращенный с открытием URL-адреса, и чтение потока с помощью WebClient, как описано в balexandre. –

+0

большое спасибо за ваш ответ – Musa