# Processing XML

**URL:** <https://www.ruby-forum.com/t/processing-xml/195508>\
**Category:** Ruby\
**Created:** [September 24, 2010, 2:50am UTC](https://www.ruby-forum.com/t/processing-xml/195508 "2010-09-24T02:50:26Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![berlin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/41988e/32.png) [@berlin](https://www.ruby-forum.com/u/berlin)\
**Post date:** [September 24, 2010, 2:50am UTC](https://www.ruby-forum.com/t/processing-xml/195508/1 "2010-09-24T02:50:26Z")

</div>

I have the following xml layout:

\<?xml version="1.0" encoding="UTF-8"?\>

prod1

prodid1

prod2 prodid2

I am trying to use REXML via  
doc.elements.each("\*/doc") { |element| puts element.attributes[“prod1”]  
}

- without success

Any ideas? Thanks

---

<div class="post-metadata">

**Author:** ![berlin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/41988e/32.png) [@berlin](https://www.ruby-forum.com/u/berlin)\
**Post date:** [September 24, 2010, 2:59pm UTC](https://www.ruby-forum.com/t/processing-xml/195508/2 "2010-09-24T14:59:00Z")

</div>

On Thu, Sep 23, 2010 at 8:50 PM, Mi Sp [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> \<?xml version="1.0" encoding="UTF-8"?\> prod1 prodid1
> 
> I am trying to use REXML via  
> doc.elements.each(“\*/doc”) { |element| puts element.attributes[“prod1”]  
> }

“doc” doesn’t have an attribute of prod1 (no one does actually). For  
example:

> > REXML::Document.new(x).elements.each(“\*/doc”){|e| e.elements.each(“field”){|f| p f.attributes; puts f.text}}  
> > {“name”=\>name=‘id’}  
> > prod1  
> > {“name”=\>name=‘prodId’}  
> > prodid1  
> > {“name”=\>name=‘id’}  
> > prod2  
> > {“name”=\>name=‘prodId’}  
> > prodid2

---

<div class="post-metadata">

**Author:** ![berlin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/41988e/32.png) [@berlin](https://www.ruby-forum.com/u/berlin)\
**Post date:** [September 25, 2010, 1:04am UTC](https://www.ruby-forum.com/t/processing-xml/195508/3 "2010-09-25T01:04:30Z")

</div>

unknown wrote:

> On Thu, Sep 23, 2010 at 8:50 PM, Mi Sp [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > \<?xml version="1.0" encoding="UTF-8"?\> prod1 prodid1
> > 
> > I am trying to use REXML via  
> > doc.elements.each(“\*/doc”) { |element| puts element.attributes[“prod1”]  
> > }
> 
> “doc” doesn’t have an attribute of prod1 (no one does actually). For  
> example:
> 
> > > REXML::Document.new(x).elements.each(“\*/doc”){|e| e.elements.each(“field”){|f| p f.attributes; puts f.text}}  
> > > {“name”=\>name=‘id’}  
> > > prod1  
> > > {“name”=\>name=‘prodId’}  
> > > prodid1  
> > > {“name”=\>name=‘id’}  
> > > prod2  
> > > {“name”=\>name=‘prodId’}  
> > > prodid2

Thanks for the quick response. You are correct - I meant to say:  
doc.elements.each(“\*/doc”) { |element| puts  
element.attributes[“prodId”]}

Any ideas on how I retrieve the field value for this attribute?

---

<div class="post-metadata">

**Author:** ![berlin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/41988e/32.png) [@berlin](https://www.ruby-forum.com/u/berlin)\
**Post date:** [September 25, 2010, 5:41am UTC](https://www.ruby-forum.com/t/processing-xml/195508/4 "2010-09-25T05:41:52Z")

</div>

> #!/usr/bin/ruby -w
> 
> require ‘rexml/document’  
> include REXML
> 
> file = File.open(“forum.xml”)  
> doc = Document.new file  
> root = doc.root
> 
> root.elements.each(“doc/field[@name=‘prodId’]”) do |element|  
> puts element.text  
> end

This works. Thank you!

---

<div class="post-metadata">

**Author:** ![berlin](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/41988e/32.png) [@berlin](https://www.ruby-forum.com/u/berlin)\
**Post date:** [September 25, 2010, 3:07am UTC](https://www.ruby-forum.com/t/processing-xml/195508/5 "2010-09-25T03:07:53Z")

</div>

Mi Sp wrote:

> unknown wrote:
> 
> > On Thu, Sep 23, 2010 at 8:50 PM, Mi Sp [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> > 
> > > \<?xml version="1.0" encoding="UTF-8"?\> prod1 prodid1
> > > 
> > > I am trying to use REXML via  
> > > doc.elements.each(“\*/doc”) { |element| puts element.attributes[“prod1”]  
> > > }
> > 
> > “doc” doesn’t have an attribute of prod1 (no one does actually). For  
> > example:
> > 
> > > > REXML::Document.new(x).elements.each(“\*/doc”){|e| e.elements.each(“field”){|f| p f.attributes; puts f.text}}  
> > > > {“name”=\>name=‘id’}  
> > > > prod1  
> > > > {“name”=\>name=‘prodId’}  
> > > > prodid1  
> > > > {“name”=\>name=‘id’}  
> > > > prod2  
> > > > {“name”=\>name=‘prodId’}  
> > > > prodid2
> 
> Thanks for the quick response. You are correct - I meant to say:  
> doc.elements.each(“\*/doc”) { |element| puts  
> element.attributes[“prodId”]}
> 
> Any ideas on how I retrieve the field value for this attribute?

Heh…I just registered so I could post on the roughly the same subject,  
but this seems to work:

#!/usr/bin/ruby -w

require ‘rexml/document’  
include REXML

file = File.open(“forum.xml”)  
doc = Document.new file  
root = doc.root

root.elements.each(“doc/field[@name=‘prodId’]”) do |element|  
puts element.text  
end
