in reply to XML::twig counting elements that don't have a certain attribute/value on them

It's hard to check without the data, but you could do $qp->children( 'q[@supp != "yes"]'). Actually if all you want is the number of such children, you can use the children_count method instead of taking scalar ( $qp->children....

Replies are listed 'Best First'.
Re^2: XML::twig counting elements that don't have a certain attribute/value on them
by mertserger (Curate) on Feb 11, 2010 at 15:09 UTC
    $qp->children( 'q[@supp != "yes"]') worked great, thanks. I have just been told that as well as suppressed quotations the count should ignore information quotes, which are indicated by an attribute info="yes" on the <q> tag. How do you combine two conditions? Would $qp->children( 'q[@supp != "yes"][@info != "yes"]') work or is it done some other way?

      No, only one predicate is accepted at the moment, so you would have to write: $qp->children( 'q[@supp != "yes" and @info != "yes"]').

        Thanks for this help. I have used that code and it seems to work but the specs have changed again (grrr users). I now need to exclude q tags with up to four different attribute values on them. So I tried:

        'q[@supp != "yes" and @info != "yes" and @info != "info" and @implied != "yes"]'

        but when I run the script with this in it I get an error message:

        XML error:wrong condition 'q[@supp != "yes" and @info != "yes" and @info != "info" and @implied != "yes"]' at lib//handlers.pm line 1824

        If I remove any two of the conditions the script runs again. Is there a limit to the number of conditions you can combine or have I made some stupid mistake?

        The last option is entriely possible