# -*- ruby -*- # # Using an internal stack. # require 'xtemplate' require 'xtemplate/xml' doc = XTemplate::XMLDocument.new(<<EOF) <?xml version="1.0"?> <members> <member><uid opt="A">1</uid><name>name1</name><email>name1@com</email></member> <member><uid opt="B">2</uid><name>name2</name><email>name2@com</email></member> <member><uid>3</uid><name>name3</name><email>name3@com</email></member> <member><uid>4</uid><name>name4</name><email>name4@com</email></member> </members> EOF include XTemplate::XPath puts(value_inspect(doc['//uid[@opt="A"]'])) puts(value_inspect(doc['//uid[@opt]'])) p doc['//uid[@opt="A"]{text()}'] p doc['//uid[@opt="A"]/@opt'] p doc['//uid[@opt]{text()}'] puts "--" puts doc['/members{dump()}'] puts "--" puts doc['/members/member{dump()}']