in reply to Using XPaths with XML::LibXML and XPathContext

This is just a repeat of your previous question, see Re^2: xmlns and XML::LibXML and Re^5: xmlns and XML::LibXML ( local-name() )

  • Comment on Re: Using XPaths with XML::LibXML and XPathContext

Replies are listed 'Best First'.
Re^2: Using XPaths with XML::LibXML and XPathContext
by worik (Sexton) on Jun 03, 2015 at 01:03 UTC

    I get it now. (I was getting confused between the namespace DAV: and the namespace DAV, duh!)

    Is it compulsory to register a namespace prefix? I can seem to find no way of using a fully qualified XPath. For a namespace NS calling registerNs(NS, NS) works. Is that the only way?

      I get it now. (I was getting confused between the namespace DAV: and the namespace DAV, duh!) Is it compulsory to register a namespace prefix? I can seem to find no way of using a fully qualified XPath. For a namespace NS calling registerNs(NS, NS) works. Is that the only way?

      If you want to use a prefix in xpath, a prefix that doesn't occur in the xml, you have to register it

      You don't have to use a prefix in xpath, just write longer xpath

      //*[ local-name() != 'propfind' and contains(local-name(), 'prop') and namespace-uri() = 'DAV:' ]

      It all works the same

Re^2: Using XPaths with XML::LibXML and XPathContext
by Anonymous Monk on Jun 03, 2015 at 01:05 UTC

    I get it now. (I was getting confused between the namespace DAV: and the namespace DAV, duh!)

    Is it compulsory to register a namespace prefix? I can seem to find no way of using a fully qualified XPath. For a namespace NS calling registerNs(NS, NS) works. Is that the only way?

      $xpc->registerNS($prefix, $ns) defines a prefix. (Not the only one, though.) You can't use a prefix you haven't defined. But it's possible to build XPaths that don't use prefixes using namespace-uri() and local-name().