def process_children( node, output_node, xpath_expr="node()" )
      REXML::XPath.each( node, xpath_expr ) do |item|
        if (item.kind_of?(REXML::Element)) then
          str = "process_" + @namespace_urn[item.namespace] + "_" +
            item.name.tr_s(":-", "__")
          if self.class.method_defined?( str ) then
            self.send( str, item, output_node )
          else
            process_children(item, output_node)
          end
        elsif (item.kind_of?(REXML::Text) && !item.value.match(/^\s*$/))
          output_node.add_text(item.value)
        end
      end
      #
      # If it's empty, add a null string to force a begin and end
      # tag to be generated
      if (!output_node.has_elements? && !output_node.has_text?) then
        output_node.add_text("")
      end
    end
def process_children( node, output_node, xpath_expr="node()" )
      REXML::XPath.each( node, xpath_expr ) do |item|
        if (item.kind_of?(REXML::Element)) then
          str = "process_" + @namespace_urn[item.namespace] + "_" +
            item.name.tr_s(":-", "__")
          if self.class.method_defined?( str ) then
            self.send( str, item, output_node )
          else
            process_children(item, output_node)
          end
        elsif (item.kind_of?(REXML::Text) && !item.value.match(/^\s*$/))
          output_node.add_text(item.value)
        end
      end
      #
      # If it's empty, add a null string to force a begin and end
      # tag to be generated
      if (!output_node.has_elements? && !output_node.has_text?) then
        output_node.add_text("")
      end
    end
Process an element's children
 node: the context node
 output_node: the node to which to add the children
 xpath_expr: which children to process (default is all)

 Algorithm:
 If the node is a text node, output to the destination.
 If it's an element, munge its name into
 <tt>process_prefix_elementname</tt>. If that method exists,
 call it to handle the element. Otherwise, process this node's
 children recursively.