An xml file is generated and i am currently parsing through it in a
rails app. The problem with this XML file is sometimes the elelment
doesnt have a value it sometimes doesnt include the tags in the file.
So for example:
If it has a value
<Client>Client Name</Client>
An empty value
<Client></Client>
Sometimes i wont even have the above tags depending on how the file was
generated from a different application.
I want to check if the Client element is present in the file so the
following code below works somehow:
if !element.elements["Client"].nil?
project.client = element.elements["Client"].text
end
My question is there a more elegant way to this? I dont want to have to
write an if/case statment for every possible element. I did try the
below but that gave me an error on the nil? because it couldnt find the
element to test if it was nil, thats why im suprised the above code
works.
I have no idea of REXML but you are missing a ? here. The one present is
the one of the ?: operator, but you need the .nil? method and not the
.nil method so you have to add a second one.
And if everything works like the above (i.e. the XML Tag has the same
name as the model attribute) then you could use something like this
(untested of course) and maybe stick it into a method:
e = "Client"
meth = "#{e.downcase}=".to_sym
text = !element.elements[e].nil? ? element.elements[e].text : nil
project.send(meth, text)
Urban
···
On Aug 30, 2007, at 12:35 , John Butler wrote:
My question is there a more elegant way to this? I dont want to have to
write an if/case statment for every possible element. I did try the
below but that gave me an error on the nil? because it couldnt find the
element to test if it was nil, thats why im suprised the above code
works.
An xml file is generated and i am currently parsing through it in a
rails app. The problem with this XML file is sometimes the elelment
doesnt have a value it sometimes doesnt include the tags in the file.
So for example:
If it has a value
<Client>Client Name</Client>
An empty value
<Client></Client>
Sometimes i wont even have the above tags depending on how the file was
generated from a different application.
I want to check if the Client element is present in the file so the
following code below works somehow:
if !element.elements["Client"].nil?
project.client = element.elements["Client"].text
end
My question is there a more elegant way to this? I dont want to have to
write an if/case statment for every possible element. I did try the
below but that gave me an error on the nil? because it couldnt find the
element to test if it was nil, thats why im suprised the above code
works.
On Aug 30, 1:26 pm, Urban Hafner <ur...@bettong.net> wrote:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On Aug 30, 2007, at 12:35 , John Butler wrote:
> My question is there a more elegant way to this? I dont want to
> have to
> write an if/case statment for every possible element. I did try the
> below but that gave me an error on the nil? because it couldnt find
> the
> element to test if it was nil, thats why im suprised the above code
> works.
I have no idea of REXML but you are missing a ? here. The one present is
the one of the ?: operator, but you need the .nil? method and not the
nil method so you have to add a second one.
And if everything works like the above (i.e. the XML Tag has the same
name as the model attribute) then you could use something like this
(untested of course) and maybe stick it into a method:
e = "Client"
meth = "#{e.downcase}=".to_sym
text = !element.elements[e].nil? ? element.elements[e].text : nil
project.send(meth, text)