From a5246fbccaf3a4afd4c9c5982b331b335b69f2ff Mon Sep 17 00:00:00 2001 From: ser Date: Thu, 10 Jun 2004 02:01:04 +0000 Subject: - git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@6441 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/rexml/element.rb | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'lib/rexml/element.rb') diff --git a/lib/rexml/element.rb b/lib/rexml/element.rb index ffc81bed9..27886a90b 100644 --- a/lib/rexml/element.rb +++ b/lib/rexml/element.rb @@ -73,7 +73,8 @@ module REXML @attributes.each_attribute do |attr| rv << " " attr.write( rv, 0 ) - end unless @attributes.empty? + end + rv << ">" if children.size > 0 rv << " ... " @@ -517,6 +518,17 @@ module REXML :element end + def xpath + path_elements = [] + cur = self + path_elements << __to_xpath_helper( self ) + while cur.parent + cur = cur.parent + path_elements << __to_xpath_helper( cur ) + end + return path_elements.reverse.join( "/" ) + end + ################################################# # Attributes # ################################################# @@ -677,6 +689,20 @@ module REXML private + def __to_xpath_helper node + rv = node.expanded_name + if node.parent + results = node.parent.find_all {|n| + n.kind_of?(REXML::Element) and n.expanded_name == node.expanded_name + } + if results.length > 1 + idx = results.index( node ) + rv << "[#{idx+1}]" + end + end + rv + end + # A private helper method def each_with_something( test, max=0, name=nil ) num = 0 -- cgit