xpath表达式帮助选择节点 [英] xpath expression help selecting node

查看:68
本文介绍了xpath表达式帮助选择节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

,我需要获取标题"和第一个缩略图.这是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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆