# Xml builder, dynamic methods

**URL:** <https://www.ruby-forum.com/t/xml-builder-dynamic-methods/187037>\
**Category:** Rails\
**Created:** [April 16, 2010, 2:56am UTC](https://www.ruby-forum.com/t/xml-builder-dynamic-methods/187037 "2010-04-16T02:56:13Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![bigdaddy71](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/bbe5ce/32.png) [@bigdaddy71](https://www.ruby-forum.com/u/bigdaddy71)\
**Post date:** [April 16, 2010, 2:56am UTC](https://www.ruby-forum.com/t/xml-builder-dynamic-methods/187037/1 "2010-04-16T02:56:13Z")

</div>

Is there a way to do something like:

x = Builder::XmlMarkup.new(:target =\> $stdout, :indent =\> 1)  
x.instruct!  
x.response{  
x.XXXXX{

XXXXX is a variable sent in to a method.

---

<div class="post-metadata">

**Author:** ![bigdaddy71](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/bbe5ce/32.png) [@bigdaddy71](https://www.ruby-forum.com/u/bigdaddy71)\
**Post date:** [April 16, 2010, 6:30pm UTC](https://www.ruby-forum.com/t/xml-builder-dynamic-methods/187037/2 "2010-04-16T18:30:47Z")

</div>

Chris H. wrote:

> Is there a way to do something like:
> 
> x = Builder::XmlMarkup.new(:target =\> $stdout, :indent =\> 1)  
> x.instruct!  
> x.response{  
> x.XXXXX{
> 
> XXXXX is a variable sent in to a method.

Can you clarify? I don’t understand your question.

x.XXXXX { … } would create an XML tag named “XXXXX”

\<?xml version="1.0"?\> ... 

Attributes are added by passing in a hash x.XXXXX(:title =\> “foo”, name  
=\> “bar”) { … }

\<?xml version="1.0"?\> ... 

What are you actually trying to do?

---

<div class="post-metadata">

**Author:** ![bigdaddy71](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/bbe5ce/32.png) [@bigdaddy71](https://www.ruby-forum.com/u/bigdaddy71)\
**Post date:** [April 16, 2010, 6:38pm UTC](https://www.ruby-forum.com/t/xml-builder-dynamic-methods/187037/3 "2010-04-16T18:38:55Z")

</div>

Take success or error in as a text and replace the below with:

if type.eql?(‘success’)  
x.success do  
x.message “#{msg}”  
end  
else  
x.error do  
x.message “#{msg}”  
end  
end

Final version:  
remove the duplication.  
type = “success” or “error”  
x.type do  
x.message “”
