Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re^3: How to parse xml with namespase vale in XMl:LibXML? (xmllint --shell setns / xpathtester)

by ravi06 (Novice)
on Jul 08, 2013 at 12:10 UTC ( #1043103=note: print w/ replies, xml ) Need Help??


in reply to Re^2: How to parse xml with namespase vale in XMl:LibXML? (xmllint --shell setns / xpathtester)
in thread How to parse xml with namespase value in XMl:LibXML?

But when I am trying to access the nodes as below I don't get any value.

print $chapter_node->findvalue('./book:locator/@xlink:href') . "\n";
Could you please elaborate a bit or point out where I am committing mistake?


Comment on Re^3: How to parse xml with namespase vale in XMl:LibXML? (xmllint --shell setns / xpathtester)
Download Code
Replies are listed 'Best First'.
Re^4: How to parse xml with namespase vale in XMl:LibXML? (xmllint --shell setns / xpathtester)
by choroba (Canon) on Jul 08, 2013 at 12:19 UTC
    Works for me:
    #!/usr/bin/perl use warnings; use strict; use XML::LibXML; my $xml = XML::LibXML->load_xml(IO => *DATA); my $root = $xml->documentElement; my $chapter_node = $root->findnodes('book:chapter')->[0]; print $chapter_node->findvalue('./book:locator/@*') . "\n"; __DATA__ <book xmlns:book='b'> <!-- Namespace definition missing in the origina +l data --> <book:chapter id="bk444444ch1" type="CHAPTER"> <book:locator xlink:href="/book/isbn/979-0-4444-1000-17/book-part/chap +ter/bk444444ch1?releaseStatus=RELEASED" xlink:title="Photonic crystal + light-emitting sources" xlink:type="locator" xmlns:xlink="http://www +.w3.org/1999/xlink"/> <book:locator xlink:href="/book/isbn/979-0-4444-1000-17/book-part/chap +ter/bk444444ch1?releaseStatus=RELEASED&amp;format=pdf" xlink:title="P +hotonic crystal light-emitting sources" xlink:type="locator" xmlns:xl +ink="http://www.w3.org/1999/xlink"/> <book:locator xlink:href="/book/isbn/979-0-4444-1000-17/book-part/chap +ter/bk444444ch1?releaseStatus=RELEASED&amp;format=epub" xlink:title=" +Photonic crystal light-emitting sources" xlink:type="locator" xmlns:x +link="http://www.w3.org/1999/xlink"/> </book:chapter> <!-- Missing in the original data --> </book>

    Note the changes I made to your data. Maybe your $chapter_node contains something else?

    لսႽ ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ
      Hi Choroba,

      Thanks a lot and sorry for being stupid. Actually, my objective was to get values of "xlink:href" and "xlink:title" for first occurrence of "book:locator" in Xpath context.

      Any hint or tweak on that?
        To use namespaces in the full depth, use XML::LibXML::XPathContext:
        #!/usr/bin/perl use warnings; use strict; use XML::LibXML; my $xpc = XML::LibXML::XPathContext->new(); my $xml = XML::LibXML->load_xml(IO => *DATA); my $root = $xml->documentElement; $xpc->registerNs('xlink', 'http://www.w3.org/1999/xlink'); my $chapter_node = $xpc->findnodes('book:chapter', $root)->[0]; print $xpc->findvalue('book:locator/@xlink:title | book:locator/@xlink +:href', $chapter_node) . "\n";
        لսႽ ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ
Re^4: How to parse xml with namespase vale in XMl:LibXML? (xmllint --shell setns / xpathtester)
by Anonymous Monk on Jul 08, 2013 at 13:38 UTC

    Could you please elaborate a bit or point out where I am committing mistake?

    Well, no, you don't show self-contained code . I guess that you didn't read my nodes and setup xpc with some setns, but I don't really have any way of knowing; also, I hate xml

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1043103]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (11)
As of 2015-07-30 21:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (273 votes), past polls