I am not completely clear about your intention and may repeat something you already know:

XML::LibXML::XPathContext->registerNs doesn't modify the context node (document) in any way, it only maps the prefixes to namespaces. This mapping has nothing common with namespace mapping in any element.

When looking for nodes via:

$xc->findnodes('//*/info/fooTransaction/transactionDetail/histFile:tra +nsactionSummary/*')
the namespace qualified element names are compared. In xpath context the histFile:transactionSummary is mapped to <urn:histFile>transactionSummary, while the fully qualified name of histFile::transactionSummary element in your document is <http://yet.another.arbitrary.url/>transactionSummary, so they don't match.

In XPath you can also look by local or qualified name of the element.

# looking by local-name $xc->findnodes('//*/info/fooTransaction/transactionDetail/*[local-name +() = "transactionSummary"]/*'); # looking by qualified name $xc->findnodes('//*/info/fooTransaction/transactionDetail/*[name() = " +histFile:transactionSummary"]/*');
In this case you can call findnodes method on any node, you don't need the XML::LibXML::XPathContext with its prefix => namespace mapping:
$doc->findnodes('//*/info/fooTransaction/transactionDetail/*[name() = +"histFile:transactionSummary"]/*');


In reply to Re: XML::LibXML findnodes and namespaces by roman
in thread XML::LibXML findnodes and namespaces by shamu

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.