2

Twitter の atom/xml フィードから正しいデータを取得しようとしています。txmldocument に twitter データがあり、そこから特定の情報を取得しようとしています。

以下は、切り捨てられたデータの例です。

<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',''));

私が得たのは FIRST リンク タグの href 値ですが、SECOND リンク タグが必要で、その方法が正確にはわかりません。誰にもアイデアはありますか?

ありがとう。

4

3 に答える 3

5

あなたはこれを行うことができます:

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

オブジェクトだからChildNodesです。IXMLNodeListノード「2」が存在するかどうか、およびtype="image/png"プロパティがあるかどうかを確認してください - 常にデータを検証してください。

これは Delphi ドキュメントの一部です。

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

説明

Nodes を読み取り、リスト内の指定されたノードにアクセスします。

IndexOrNameは、目的のノードを識別します。かもね

  • ノードのインデックス。0 は最初のノードのインデックス、1 は 2 番目のノードのインデックスなどです。Count プロパティは、指定できるインデックスの上限を提供します。
  • リスト内のノードの LocalName プロパティ。

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

于 2009-07-05T15:34:23.880 に答える
4

Nick のソリューションは機能しますが、イメージ要素が常に 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;
于 2009-07-06T09:52:33.397 に答える