Steven, your explanation text looks excellent - clear and some useful examples.
I had only a couple of minor comments - the line "strings in the form like above" is perhaps a bit awkward. Maybe it would be better to just give an example, i.e.: strings in the form "prefix:href" Also, both of the questions you pose should have a question mark at the end, i.e.: * How do I match nodes that use the default namespace prefix? * How do I match particular nodes within any namespace? I hope these comments are useful, and apologies for not sending them in the form of a proper patch, but I'm labouring under the threat of a rapidly approaching deadline. -- sam On 21/01/2008, Steven Parkes <[EMAIL PROTECTED]> wrote: > > > Please send me a documentation paragraph that I can add to .find > which > makes this more explicit and understandable. Hopefully this will > eliminate future confusion over the usage. > > There is a little bit of documentation, but it's in the XPath class, which > takes a little tracking down. It doesn't help the the XPath rdocs are > messed > up: the doc for .find ends up in XML::XPath::InvalidPath for reasons I > haven't been able to ferret out. > > Here's a patch that tries to explain things, as applied to the XPath file. > (I haven't looked too hard into why this is getting put in the wrong > place, > though I guess I could.) This could be moved in whole to the Node class if > desired or a pointer from the Node class to the XPath class. > > Index: ext/libxml/ruby_xml_xpath.c > =================================================================== > --- ext/libxml/ruby_xml_xpath.c (revision 242) > +++ ext/libxml/ruby_xml_xpath.c (working copy) > @@ -99,8 +99,8 @@ > * call-seq: > * XML::XPath.find(path, namespaces = [any]) => xpath > * > - * Find nodes matching the specified xpath (and optionally any of the > - * supplied namespaces) and return as an XML::Node::Set. > + * Find nodes matching the specified xpath and return as an > + * XML::Node::Set. > * > * The optional namespaces argument may take one of > * two forms: > @@ -109,9 +109,33 @@ > * * An array of: > * * strings in the form like above > * * arrays in the form of ['prefix','uri'] > - * > - * If not specified, matching nodes from any namespace > - * will be included. > + * > + * For example, to match the <p> elements in the XHTML document > + * <html xmlns="http://www.w3.org/1999/xhtml"> > + * <p /> > + * <p /> > + * </html> > + * you could write > + * doc.find "//x:p", "x:http://www.w3.org/1999/xhtml" > + * > + * Two very commonly asked questions are: > + * > + * * How do I match nodes that use the default namespace prefix > + > + * The example shows how to do this. Even though the default namespace > + * prefix is used in the document, the xpath expression must > + * explicitly identify the namespace. The only nodes that a pattern > + * without a namespace will match are nodes that do not have a > + * namespace, neither explicit nor from a default prefix. > + * > + * * How do I match particular nodes within any namespace > + * > + * It is possible to match all nodes with the star pattern, e.g., > + * <tt>//*</tt>, and it is possible to match all nodes within an > + * individual namespace, e.g., <tt>//ns:*</tt>, but it is not possible > + * to match individual nodes from any namespace: <tt>//*:p</tt> is > + * invalid. > + * > */ > VALUE > ruby_xml_xpath_find(VALUE class, VALUE anode, VALUE xpath_expr, VALUE > nslist) { > > _______________________________________________ > libxml-devel mailing list > [email protected] > http://rubyforge.org/mailman/listinfo/libxml-devel >
_______________________________________________ libxml-devel mailing list [email protected] http://rubyforge.org/mailman/listinfo/libxml-devel
