From: Robert Klemme Date: 2011-04-04T16:13:05+09:00 Subject: Re: Can you search in REXML by attributes? --00163646d0388fc60b04a0127d2c Content-Type: text/plain; charset=ISO-8859-1 On Fri, Apr 1, 2011 at 9:22 PM, Kyle X. wrote: > Thank you Jesus, that is exactly what I was looking for and it works > great! Here's the same with REXML. 09:12:25 Temp$ ./rx2.rb Approach 1 117.4 119.7 0. Approach 2 117.4 119.7 0. Approach 3 117.4 119.7 0.0 09:12:45 Temp$ cat -n rx2.rb 1 #!/bin/env ruby19 2 3 require 'rexml/document' 4 5 doc = REXML::Document.new(DATA.read) 6 7 puts 'Approach 1' 8 9 REXML::XPath.each(doc, "//*[@id='i1671']//@ref") do |e| 10 REXML::XPath.each(doc, "//*[@id='#{e.value}']//IfcLengthMeasure/text()") do |lm| 11 puts lm 12 end 13 end 14 15 puts 'Approach 2' 16 17 refs = REXML::XPath.each(doc, "//*[@id='i1671']//@ref").map {|e| e.value} 18 values = refs.map {|r| REXML::XPath.each(doc, "//*[@id='#{r}']//IfcLengthMeasure/text()").to_a}.flatten 19 puts values 20 21 puts 'Approach 3' 22 23 refs = REXML::XPath.each(doc, "//*[@id='i1671']//@ref").map {|e| e.value} 24 values = refs.map {|r| REXML::XPath.each(doc, "//*[@id='#{r}']//IfcLengthMeasure/text()").map {|x| x.value.to_f}}.flatten 25 puts values 26 27 __END__ 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 117.4 44 119.7 45 0. 46 47 48 09:12:46 Temp$ Have fun! Cheers robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/ --00163646d0388fc60b04a0127d2c Content-Type: application/x-sh; name="rx2.rb" Content-Disposition: attachment; filename="rx2.rb" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gm32chhu0 IyEvYmluL2VudiBydWJ5MTkKCnJlcXVpcmUgJ3JleG1sL2RvY3VtZW50JwoKZG9jID0gUkVYTUw6 OkRvY3VtZW50Lm5ldyhEQVRBLnJlYWQpCgpwdXRzICdBcHByb2FjaCAxJwoKUkVYTUw6OlhQYXRo LmVhY2goZG9jLCAiLy8qW0BpZD0naTE2NzEnXS8vQHJlZiIpIGRvIHxlfAogIFJFWE1MOjpYUGF0 aC5lYWNoKGRvYywgIi8vKltAaWQ9JyN7ZS52YWx1ZX0nXS8vSWZjTGVuZ3RoTWVhc3VyZS90ZXh0 KCkiKSBkbyB8bG18CiAgICBwdXRzIGxtCiAgZW5kCmVuZAoKcHV0cyAnQXBwcm9hY2ggMicKCnJl ZnMgPSBSRVhNTDo6WFBhdGguZWFjaChkb2MsICIvLypbQGlkPSdpMTY3MSddLy9AcmVmIikubWFw IHt8ZXwgZS52YWx1ZX0KdmFsdWVzID0gcmVmcy5tYXAge3xyfCBSRVhNTDo6WFBhdGguZWFjaChk b2MsICIvLypbQGlkPScje3J9J10vL0lmY0xlbmd0aE1lYXN1cmUvdGV4dCgpIikudG9fYX0uZmxh dHRlbgpwdXRzIHZhbHVlcwoKcHV0cyAnQXBwcm9hY2ggMycKCnJlZnMgPSBSRVhNTDo6WFBhdGgu ZWFjaChkb2MsICIvLypbQGlkPSdpMTY3MSddLy9AcmVmIikubWFwIHt8ZXwgZS52YWx1ZX0KdmFs dWVzID0gcmVmcy5tYXAge3xyfCBSRVhNTDo6WFBhdGguZWFjaChkb2MsICIvLypbQGlkPScje3J9 J10vL0lmY0xlbmd0aE1lYXN1cmUvdGV4dCgpIikubWFwIHt8eHwgeC52YWx1ZS50b19mfX0uZmxh dHRlbgpwdXRzIHZhbHVlcwoKX19FTkRfXwo8cm9vdCB4bWxuczpleHA9Imh0dHA6Ly9mb28iIHht bG5zOnhzaT0iaHR0cDovL2JhciI+CjxJZmNXYWxsU3RhbmRhcmRDYXNlIGlkPSJpMTY3NyI+CiA8 T2JqZWN0UGxhY2VtZW50PgogICA8SWZjTG9jYWxQbGFjZW1lbnQgeHNpOm5pbD0idHJ1ZSIgcmVm PSJpMTY3MSIvPgogPC9PYmplY3RQbGFjZW1lbnQ+CjwvSWZjV2FsbFN0YW5kYXJkQ2FzZT4KCjxJ ZmNBeGlzMlBsYWNlbWVudDNEIGlkPSJpMTY3MSI+CiA8TG9jYXRpb24+CiAgIDxJZmNDYXJ0ZXNp YW5Qb2ludCB4c2k6bmlsPSJ0cnVlIiByZWY9ImkxNjY3Ii8+CiA8L0xvY2F0aW9uPgo8L0lmY0F4 aXMyUGxhY2VtZW50M0Q+Cgo8SWZjQ2FydGVzaWFuUG9pbnQgaWQ9ImkxNjY3Ij4KIDxDb29yZGlu YXRlcyBpZD0iaTE2NzAiIGV4cDpjVHlwZT0ibGlzdCI+CiAgIDxJZmNMZW5ndGhNZWFzdXJlIGV4 cDpwb3M9IjAiPjExNy40PC9JZmNMZW5ndGhNZWFzdXJlPgogICA8SWZjTGVuZ3RoTWVhc3VyZSBl eHA6cG9zPSIxIj4xMTkuNzwvSWZjTGVuZ3RoTWVhc3VyZT4KICAgPElmY0xlbmd0aE1lYXN1cmUg ZXhwOnBvcz0iMiI+MC48L0lmY0xlbmd0aE1lYXN1cmU+CiA8L0Nvb3JkaW5hdGVzPgo8L0lmY0Nh cnRlc2lhblBvaW50Pgo8L3Jvb3Q+Cg== --00163646d0388fc60b04a0127d2c--