2009-07-05 40 views
2

私はtwitter atom/xmlフィードから正しいデータを取得しようとしています。私はtxmldocumentのtwitterデータを持っており、そこからいくつかの特定の情報を取得しようとしています。ここでDelphi - XML - childnodes - 属性を取得する

データの切り捨て例です。

<entry> 
    <link type="text/html" rel="alternate" href="http://twitter.com/blub/statuses/1501068" /> 
    <title>title of twitter post goes here</title> 
    <link type="image/png" rel="image" href="http://s3.amazonaws.com/twitter_production/profile_images/234870532/normal.jpg" /> 
</entry> 

私が持っている問題は、私はプロフィール画像のURL(第2リンクタグのhref属性)を取得しようとしていますということです。

私はこのようなコードを使用する場合:

i:=xmldocument1.DocumentElement.ChildNodes['entry']; 
text:=(i.ChildNodes['link'].GetAttributeNS('href','')); 

私は何を取得することは、第1リンクタグのhrefの値ですが、私は2番目のリンクタグをしたい、と私はそれを行うために正確にどのように知りませんが。誰にもアイデアはありますか?

ありがとうございました。

答えて

5

あなたはこれを行うことができます:ChildNodesIXMLNodeListオブジェクトです

i := xmldocument1.DocumentElement.ChildNodes['entry']; 
text := (i.ChildNodes[2].GetAttributeNS('href','')); // notice the [2] index 

ので。ノード '2'が存在するかどうかを確認し、ノードにはtype="image/png"プロパティがある場合は常にデータを検証してください。ここで

は、リストに指定されたノード にアクセスするための

property Nodes[const IndexOrName: OleVariant]: IXMLNode; default; 

説明

読むノード、Delphiのマニュアルの一部です。

インデックス名は、ノード を識別します。これは

  • 0は最初のノードのインデックスであるノードのインデックスは、1が第2のノードの 指標である、というようにすることができます。 Countプロパティは、指定可能なインデックスにバインドされた上位の を提供します。
  • リスト内のノードのLocalNameプロパティ。

IndexOrNameがリストに ノードを識別しない場合は、このノードリストの親 を含む文書 はその OptionsプロパティでdoNodeAutoCreateが含まれている場合は、しようと ノードリストは、使用して新しいノードを作成しますIndexOrNameで指定された の名前 ノードリストで新しいノードを作成できない場合は、 例外が発生します。

+0

を追加しました。ありがとうございました。 –

+0

私は助けることができてうれしいです:) –

+0

ダン、私はあなたがそれに満足している場合ニックの答えを受け入れるべきだと思います。もしそうでなければ、この答えは永遠に未回答のままになっています。また、私は答えにNick +1を与えました。 –

4

ニックの解決策は動作しますが、イメージ要素は常に3番目の子ノードであると仮定します。何らかの理由でそれがなければ、あなたは再び問題に遭遇します。より良い解決策は、子ノードをループして、type = "image/png"属性を持つノードをチェックすることです。

EntryNode := xmldocument1.DocumentElement.ChildNodes['entry']; 
for i := 0 to EntryNode.ChildNodes.Count do 
    if EntryNode.ChildNodes[i].HasAttribute('type') 
    and EntryNode.ChildNodes[i].Attribute['type'] = 'image/png' then 
    begin 
     text := EntryNode.ChildNodes[i].Attribute['href']; 
     Break; 
    end; 
0

*が正常に動作ノード名

EntryNode := xmldocument1.DocumentElement.ChildNodes['entry']; 
for i := 0 to EntryNode.ChildNodes.Count do 
    if EntryNode.ChildNodes[i].NodeName='link' 
    and EntryNode.ChildNodes[i].HasAttribute('type') 
    and EntryNode.ChildNodes[i].Attribute['type'] = 'image/png' then 
    begin 
     text := EntryNode.ChildNodes[i].Attribute['href']; 
     Break; 
    end; 
関連する問題