xpath表达式帮助选择节点 [英] xpath expression help selecting node
问题描述
,我需要获取标题"和第一个缩略图.这是media:group
中的第一张图片
for each entry in this xml, i need to get the "title" and the first thumbnail image. that is the first image in the media:group
<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns='http://www.w3.org/2005/Atom' xmlns:media='http://search.yahoo.com/mrss/'>
<entry>
<title>Progression! 9 more pounds to goo!</title>
<media:group>
<media:thumbnail url='http://i.ytimg.com/vi/7MTjYXt3rLQ/default.jpg'/>
<media:thumbnail url='http://i.ytimg.com/vi/7MTjYXt3rLQ/mqdefault.jpg'/>
<media:thumbnail url='http://i.ytimg.com/vi/7MTjYXt3rLQ/hqdefault.jpg'/>
<media:thumbnail url='http://i.ytimg.com/vi/7MTjYXt3rLQ/1.jpg'/>
<media:thumbnail url='http://i.ytimg.com/vi/7MTjYXt3rLQ/2.jpg'/>
<media:thumbnail url='http://i.ytimg.com/vi/7MTjYXt3rLQ/3.jpg'/>
</media:group>
</entry>
<entry>
<title>Plank Variations Workout with Max Wettstein</title>
<media:group>
<media:thumbnail url='http://i.ytimg.com/vi/O1Nd8lZFGpc/default.jpg'/>
<media:thumbnail url='http://i.ytimg.com/vi/O1Nd8lZFGpc/mqdefault.jpg'/>
<media:thumbnail url='http://i.ytimg.com/vi/O1Nd8lZFGpc/hqdefault.jpg'/>
<media:thumbnail url='http://i.ytimg.com/vi/O1Nd8lZFGpc/1.jpg'/>
<media:thumbnail url='http://i.ytimg.com/vi/O1Nd8lZFGpc/2.jpg'/>
<media:thumbnail url='http://i.ytimg.com/vi/O1Nd8lZFGpc/3.jpg'/>
</media:group>
</entry>
</feed>
这是我的代码
this is my code
Dim xmlDoc As MSXML2.DOMDocument30
Dim xmlEntryNode As MSXML2.IXMLDOMNode
Dim xmlEntryNodes As IXMLDOMNodeList
Dim xmlC1Nodes As IXMLDOMNodeList
Dim ns As String
Set xmlDoc = New DOMDocument30
ns = txtNS.Text
xmlDoc.setProperty "SelectionLanguage", "XPath"
xmlDoc.setProperty "SelectionNamespaces", ns
If xmlDoc.loadXML(txtXml.Text) = False Then
appendText "xml document load failed"
Exit Sub
End If
Set xmlEntryNodes = xmlDoc.documentElement.selectNodes(/x:feed/x:entry)
Dim i As Integer
For i = 0 To xmlEntryNodes.length - 1
Set xmlEntryNode = xmlEntryNodes(i)
appendText xmlEntryNode.Text
Set xmlC1Nodes = xmlDoc.selectNodes(//media:group/media:thumbnail[1]/@url)
If xmlC1Nodes.length > 0 Then
Dim j As Integer
For j = 0 To xmlC1Nodes.length - 1
appendText xmlC1Nodes(j).Text
Next
End If
Next
Exit Sub
这是我的输出
and here is my output
Progression! 9 more pounds to goo!
http://i.ytimg.com/vi/7MTjYXt3rLQ/default.jpg
http://i.ytimg.com/vi/O1Nd8lZFGpc/default.jpg
Plank Variations Workout with Max Wettstein
http://i.ytimg.com/vi/7MTjYXt3rLQ/default.jpg
http://i.ytimg.com/vi/O1Nd8lZFGpc/default.jpg
任何人都可以帮助我进行调整,以使其对于每个** entry **
can anyone pls help me adjust to make it return only one image for each **entry**
推荐答案
返回仅一张图像的结果是,您在内部for-next循环中选择每个media:group节点的所有第一张缩略图.取而代之的是,您只需要第一个media:在外部for-next循环中当前项目的缩略图.
您可以通过将"Set xmlC1Nodfes ="行更改为以下内容来解决此问题:
What happens is that you select in the inner for-next loop all the first thumbnails of each media:group node. Instead you only want the first media:thumbnail of the current item in de outer for-next loop.
You can solve this by changing the line with ''Set xmlC1Nodfes ='' to:
Set xmlC1Nodes = xmlEntryNode.selectNodes("media:group/media:thumbnail[1]/@url")
在这一行中有两件事发生了变化.在发布的代码中,您使用了xmlDoc.selectNodes,从而引用了整个XML文档.将其更改为xmlEntryNode.selectNodes,将为您提供对当前条目的引用.
这将无法解决问题,因为XPath查询中的尾部"//"(从文档的根节点搜索).删除它们以从xmlEntryNode启动XPath查询.
Two things are changed in this line. In the posted code you used xmlDoc.selectNodes, thus referencing the whole XML document. Changing this into the xmlEntryNode.selectNodes, will give you a reference to the current entry.
This will not solve the problem, beause off the trailing ''//'' in your XPath query (searching from the rootnode of the document). Remove these to start your XPath query from the xmlEntryNode.
这篇关于xpath表达式帮助选择节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!