Replacing XML tag with a string based on parameters in tag?

I am trying to figure out a (better) way to do the following:

some_string = "Display a widget here - <widget>1234</widget>" new_string = replace_widgets_in_string(some_string) p new_string => #Display a widget here - Widget 1234 is blue"

the method replace_widgets_in_string will need to pick out the xml tag and value (which will be the model id) and from there I will find the model and return a string that replaces the widget tags.

Is there an existing library or easy way to do this that I might not be thinking of? I am assuming rexml wont work, since its not a well formed doc. I want to avoid coding a monolithic method using string splits. Any ideas?

I am trying to figure out a (better) way to do the following:

some_string = "Display a widget here - <widget>1234</widget>" new_string = replace_widgets_in_string(some_string) p new_string => #Display a widget here - Widget 1234 is blue"

the method replace_widgets_in_string will need to pick out the xml tag and value (which will be the model id) and from there I will find the model and return a string that replaces the widget tags.

Is there an existing library or easy way to do this that I might not be thinking of? I am assuming rexml wont work, since its not a well formed doc. I want to avoid coding a monolithic method using string splits. Any ideas?

Well, if you're string will only ever contain one instance of the widget this would work...

>> some_string =~ /<(.*?)>(\d+)<\/\1>/ => 24 >> $1 => "widget" >> $2 => "1234"

Otherwise I'd look into hpricot/nokigirl and let it parse it.

-philip