Dave Green wrote:
> I am getting an encoding problem when trying to write an xml file out
> after it generated by a StringTemplater
> (http://github.com/starapor/slippers/tree/). I am using the templater to
> generate an xml file from within Cucumber. The template looks fine and
> produces xml correctly but when you use the string from the
> engine.render(Slippers::BindingWrapper.new(binding)).to_str method and
> pass it to a new rexml\document or File.new the generated file is
> unreadable.
> 
> I have included the problem file on gist, link below and the example is
> called encoding_problem.rb.
> 
> git clone git://gist.github.com/546222.git gist-546222

   I git cloned the file and looked through to see if i could find the 
problem. Seems more than just an encoding problem from when I worked on 
it.
In both encoding_problem.rb and test_templater.rb, I had to change 
Slippers to lowercase slippers when requiring it.
   Also, the encoding problem appears to be because of how Document.new 
works. In the xml_template.st, once I changed it from "utf-16" to 
"utf-8", it started parsing correctly, but had other errors. I'm 
guessing this is because the string uses 1 byte per character, but 
utf-16 gave the Document.new the impression that each character used 2 
bytes.
   Once I tried running the encoding_problem.rb again, I eventually 
realized from the error that a tag in items.st wasn't closed properly. 
The ending price tag is missing a slash. After all this was done, it's 
output was:

<?xml version='1.0' encoding='UTF-8'?>
<SearchResponse xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
  <response_id>1000</response_id>
  <number_of_products>2</number_of_products>
  <items>
    <stock_code>ABC001</stock_code>
    <description>An item description</description>
    <price>100</price>
</items>
<items>
    <stock_code>ABC002</stock_code>
    <description>Another item</description>
    <price>150</price>
</items>

</SearchResponse>

I hope this was helpful.
My ruby is 1.8.7
-- 
Posted via http://www.ruby-forum.com/.