2009-05-26 39 views
1

これは初心者の質問ですので、私に親切です:)オンラインAPIからデータを抽出する方法は?

私はASP.NETでPHP APIを使用できますか?この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" 

} 

下に示されている:PINコードを受け取り、XML文書を返すサービスhttp://someservice.com/name_query.php?pincode=があります。

LINQtoXMLを使用してそれを使用できますか? XMLで消費する例とJSONで非常に役立つ例を挙げてください。

答えて

6

XML JSON最初

あなたには、いくつかのAJAXのクエリを実行するためにAPIを使用しようとしている場合(のように、APIを問い合わせますユーザーがリンクや画像をクリックしたときにそのリンクの色を変更したいとしたら、魔法使いはユーザーにOKかどうかを教えてくれます... XMLを解析する必要がないのでJSONに行きます)

コードの中で処理されるデータを提示するだけで、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; 
} 

簡単な使用、、あなたは文字列の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> 

文書情報を処理する方法:

出力のようなXML文書であることを想像します以下のようなものです:あなたが最初の行に言及としてのMyClassが... APIによって返されたすべての値を

をいっぱい持っています

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

...これは:)初心者のためのものであり、 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

(それは先進的なアプローチ)をしたらどうしますか? :)将来のバージョンではおそらくLinq2Xmlが使用されますが、決してJSONを使用しないとJSONが出力されません。JSONを出力しない場合は、PAGING部分の結果グリッドを表示しているときなどに使用します。 LIN2XMLを使うとすばやく高速に動作しますが、いくつかのコード行を節約できます。最も簡単なものを最初に出してください。 – balexandre

+0

トンに感謝します。 – Musa

3

LINQtoXMLを使用すると、XMLDomを使用できます。 C#またはVB.NETを使用する言語は何ですか?

一つの方法は、XMLにLINQでこれを行うには:対

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

thanks david..how XMLからJSONまたはxmlSourceStringを返すことができますか? – Musa

+1

変数xmlSourceStringを、URLを開くことから返されたXMLに設定し、Webクライアントを使用してストリームを読み込みます。 –

+0

お返事ありがとうございます – Musa

関連する問題