Solved

XML::LibXML and Xpath syntax How do I get attribute of sibling

Posted on 2016-08-15
  • Perl
  • XML
  • Scripting Languages
  • Programming Languages-Other
  • Shell Scripting
  • +1
2
136 Views
Last Modified: 2016-08-21
This is follow on fromThis Question

In the xml bellow I need to locate the next 'link' after I've located 'images' within the parent 'entry'


I found this link that suggest can use "following-sibling" can someone see what I've  done wrong?  

note I've striped the xml down to simplify

Perl script
 
!C:\strawberry\perl\bin\perl.exe

use strict;
use warnings;
use XML::LibXML;
use XML::LibXML::XPathContext;
use Data::Dump qw(dump);


my $filename = 'georss.xml';

my $dom = XML::LibXML->load_xml(location => $filename);
my $xpc = XML::LibXML::XPathContext->new($dom);
$xpc->registerNs(dft => "http://www.w3.org/2005/Atom");
$xpc->registerNs(georss => "http://www.georss.org/georss");


foreach my $Entry ($xpc->findnodes("//dft:feed/dft:entry")) {

     foreach my $Images ($xpc->findnodes("/dft:title[not(\@type='text')]", $Entry)) {
         my $ImageVal = $Images->textContent;

          ####  This finds all the Images
         print "ImageVal $ImageVal\n";
         my $link = $Images->following-sibling::link[\@href];
         print "link $link\n";
         
     }

}

Open in new window


georss.xml
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" >
  <entry>
    <title>fileName1.jpg</title>
     <link href="PathTo/fileName1.jpg" />
  </entry>
  <entry>
    <title>fileName2.jpg</title>
     <link href="PathTo/fileName2.jpg" />
  </entry>
  <entry>
    <title>fileName3.jpg</title>
     <link href="PathTo/fileName3.jpg" />
  </entry>
  <entry>
    <title type="text">fileName.pdf</title>
     <link type="application/pdf"  href="PathTo/fileName.pdf" />
  </entry>
    <georss:where>
     <point xmlns="http://www.opengis.net/gml" srsName="urn:ogc:crs:EPSG:4326">
      <pos>45.256 -71.92</pos>
     </point>
  </georss:where>

</feed>

Open in new window

0
Comment
Question by:trevor1940
2 Comments
 
LVL 35

Accepted Solution

by:
Robert Schutt earned 500 total points
ID: 41763918
Try it like this:
foreach my $Entry ($xpc->findnodes("//dft:feed/dft:entry")) {

     foreach my $Images ($xpc->findnodes("./dft:title[not(\@type='text')]", $Entry)) {
         my $ImageVal = $Images->textContent;

          ####  This finds all the Images
         print "ImageVal $ImageVal\n";
         my $link = $xpc->findvalue('following-sibling::dft:link[1]/@href', $Images);
         print "link $link\n";
         
     }

}

Open in new window

0
 
LVL 1

Author Closing Comment

by:trevor1940
ID: 41764348
That worked thank you
0

Featured Post

Gigs: Get Your Project Delivered by an Expert

Select from freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely and get projects done right.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Recently, an awarded photographer, Selina De Maeyer (http://www.selinademaeyer.com/), completed a photo shoot of a beautiful event (http://www.sintjacobantwerpen.be/verslag-en-fotoreportage-van-de-sacramentsprocessie-door-antwerpen#thumbnails) in An…
I. Introduction There's an interesting discussion going on now in an Experts Exchange Group — Attachments with no extension (http://www.experts-exchange.com/discussions/210281/Attachments-with-no-extension.html). This reminded me of questions tha…
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…

786 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question