Как извлечь данные из онлайн-API? - PullRequest
1 голос
/ 26 мая 2009

Это вопрос новичка, поэтому будьте добры ко мне:)

Как я могу использовать 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>

1010 * JSON *

{

"CountryCode" : "US",

"City" : "Seattle",

"Result" : "Done"

}

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

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

Ответы [ 2 ]

6 голосов
/ 26 мая 2009

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

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

: -)

3 голосов
/ 26 мая 2009

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

один из способов сделать это в LINQ to 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
                               };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...