我正在尝试从twitter atom / xml Feed中获取正确的数据。我在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>
我遇到的问题是我试图获取个人资料图片网址(第二个链接标记的href属性)。
如果我使用这样的代码:
i:=xmldocument1.DocumentElement.ChildNodes['entry'];
text:=(i.ChildNodes['link'].GetAttributeNS('href',''));
我得到的是FIRST链接标记的href值,但我想要SECOND链接标记,而我不确切知道如何做到这一点。有没有人有任何想法?
感谢。
答案 0 :(得分: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;
描述
读取节点以访问指定节点 在列表中。
IndexOrName 标识所需内容 节点。它可以是
- 节点的索引,其中0是第一个节点的索引,1是 第二个节点的索引,依此类推。 Count属性提供鞋面 绑定在您可以指定的索引上。
- 列表中节点的LocalName属性。
如果IndexOrName无法识别 列表中的节点,如果是文档 包含此节点列表的父级 其中包括doNodeAutoCreate 选项属性,然后是节点列表 尝试用。创建一个新节点 IndexOrName指定的名称。如果 节点列表无法创建新节点, 它提出了一个例外。
答案 1 :(得分:4)
Nick的解决方案有效,但假设image元素始终是第三个子节点。如果由于某种原因不是那么你会再次遇到问题。更好的解决方案是遍历子节点并检查属性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;
答案 2 :(得分:0)
*添加了Nodename
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;