Hello,
I've been trying to use the namespace:: in an XPath query to get at
the namespaces for some XML elements and I've been having some seirous
difficulty with it.
I kept getting a bunch of errors about nil not having a '<<' method
defined. So I went back and checked my query string and it turns out
to be fine as far as a I can tell. Then I tried a bunch of simple
query strings using he namespace:: axis and they all failed too.
For example: "REXML::XPath.match(xml.root, 'namespace::*')"
This errored and I'm not sure how much more simple I can make a query
using the namespace axis so I decided to go in and check the code in
REXML.
Going through the call chain, I came upon one section in
REXML::XPath_Parser.rb that caught my eye:
when :namespace
new_set = []
for node in nodeset
new_nodeset << node.namespace if node.node_type == :element
or node.node_type == :attribute
end
return new_nodeset
This section is near the end of the method internal_parse if you're curious.
Two things I noted that would cause problems here:
1) new_nodeset is going to be nil on that shift operation (which is
what gave me the original error message).
2) new_nodeset will only contain the default namespace for each node,
not all of the namespaces as "namespace::*" is supposed to return.
I corrected the typo for new_nodeset and tried again and I got a
different error, basically that the string that new_nodeset was
assigned was being treated as a node when it couldn't.
I'm not sure how to fix this, and I can't get to the REXML homepage
right now (it seems to be down).
Does anybody have any advice on this? Have I really misunderstood something?
···
--
-Dan Nugent