http://qs321.pair.com?node_id=1043103


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 (Cardinal) 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