0

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

can anyone pls help me adjust to make it return only one image for each entry

Smith
  • 5,765
  • 17
  • 102
  • 161

2 Answers2

1

I'm not well-versed in VB6, but coming at this from an XPath point of view, I would select relative to the xmlEntryNode you've already got:

Set xmlC1Nodes = xmlEntryNode.selectNodes("media:group/media:thumbnail[1]/@url")

(I don't understand why your XPath expression isn't in quotes... But you said it produces output...)

Or if the selectNodes() method only applies to XML documents, then

Set xmlC1Nodes = xmlDoc.selectNodes(
        "/*/x:entry[" + i + "]/media:group/media:thumbnail[1]/@url")
LarsH
  • 27,481
  • 8
  • 94
  • 152
  • `(I don't understand why your XPath expression isn't in quotes... But you said it produces output...)` that was a typo. i dont get any text when i use the expressions you provided. i made a small exe in vb6 to test my expression – Smith Sep 02 '12 at 03:20
  • @Smith: see Dimitre's answer, regarding getting the text from the attribute value. Also, please edit your question to correct typo's so that we can see what's *actually* wrong vs. what looks wrong but is just a typo. – LarsH Sep 02 '12 at 18:58
1

can anyone pls help me adjust to make it return only one image for each entry

Use something like this (Haven't used MSXML or VB since many years):

Set urlAttrib = xmlEntryNode.SelectSingleNode("media:group/media:thumbnail[1]/@url")

wantedText = urlAttrib.nodeValue
Deanna
  • 23,876
  • 7
  • 71
  • 156
Dimitre Novatchev
  • 240,661
  • 26
  • 293
  • 431