Solved

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

Posted on 2016-08-15
2
181 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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

Business Impact of IT Communications

What are the business impacts of how well businesses communicate during an IT incident? Targeting, speed, and transparency all matter. Find out more in this infographic.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
using VBS script to log into internal website 6 43
sed command 3 30
Copy files and run psex to windows 7 only 14 51
Writing reports to a script 7 30
This article is meant to give a basic understanding of how to use R Sweave as a way to merge LaTeX and R code seamlessly into one presentable document.
Many times as a report developer I've been asked to display normalized data such as three rows with values Jack, Joe, and Bob as a single comma-separated string such as 'Jack, Joe, Bob', and vice versa.  Here's how to do it. 
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
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…

751 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