SU Ruby + XML
-
I would not go with REXML as is the slowest parser - see http://www.rubyinside.com/ruby-xml-performance-benchmarks-1641.html
"Note that the parsing time is in seconds and the Y-axis is logarithmic. Yes, Hpricot took over a minute, and REXML took over two minutes, while Nokogiri and libxml-ruby came in at a few seconds each"
-
Ah. That's interesting. I hoped to find something like that, but didn't when I was searching around.
So either Nokogiri or Hpricot. Anyone had any experience with them? Will they work with SU's stripped down Ruby 1.8.0? -
I am also looking for a solution to parse XML using SU ruby. I am writing a gas kinetics open source code which requires visualization of molecular structure and some energy related surfaces. It will be great if someone here can share more information on their experiences such as if anyone has tried but failed, or if there is any possible solution.
-
Anyone got any idea if I can use nokogiri with SU? http://nokogiri.rubyforge.org/nokogiri/
Says either 1.8 or 1.9 - but the install is a linux sudo command - can't find any way to download the package manually... -
http://rubyforge.org/frs/?group_id=7062&release_id=37319
- download the .gem
- rename to .gz or open it with Total Commander
- have a look inside
or
gem install nokogiri if you have Ruby installed with Gems support
or
git clone git://github.com/tenderlove/nokogiri.git
-
@unknownuser said:
gem install nokogiri if you have Ruby installed with Gems support
I had Ruby installed so I entered the command into a console.
C;\Users\Thomas>gem install nokogiri Successfully installed nokogiri-1.3.3-x86-mswin32 1 gem installed Installing ri documentation for nokogiri-1.3.3-x86-mswin32... Updating ri class cache with 2176 classes... Installing RDoc documentation for nokogiri-1.3.3-x86-mswin32... C;\Users\Thomas>
Seems to have worked. But how do I get the files required added and working with SU ruby?
-
search in the gems directory for nokogiri (the lib and ext directory). you can make a test outside Sketchup and use ProcMon to look what files it loads and copy those in SU Plugins subdir
-
Having explored a few options in the past I settled on writing a .DLL in .NET that uses the powerful XML query functionality of LINQ to to do the data crunching. By doing this you could call a simple function through COM to retrieve/update specific node and attribute values from SU Ruby. If you do not have knowledge of any of the main .NET languages you could possibly explore using IronRuby for this purpose.
-
@unknownuser said:
search in the gems directory for nokogiri (the lib and ext directory). you can make a test outside Sketchup and use ProcMon to look what files it loads and copy those in SU Plugins subdir
I copied nokogiri.rb and nokogiri folder from the lib folder to the SU Plugin folder.
When I start SU I get an error message:
Error Loading File nokogiri.rb 126; The specified module could not be found. - C;/Program Files (x86)/Google/Google SketchUp 7/Plugins/nokogiri/1.8/nokogiri.so
Which is strange - because the file is there; And a Console test:
File.exist?('C;/Program Files (x86)/Google/Google SketchUp 7/Plugins/nokogiri/1.8/nokogiri.so') true
So why it claims it's not there - I have no idea.
-
@toxicvoxel said:
Having explored a few options in the past I settled on writing a .DLL in .NET that uses the powerful XML query functionality of LINQ to to do the data crunching. By doing this you could call a simple function through COM to retrieve/update specific node and attribute values from SU Ruby. If you do not have knowledge of any of the main .NET languages you could possibly explore using IronRuby for this purpose.
I've briefly sniffed at C# previously - but I have no idea on how to do what you suggest.
I find it very odd that there isn't a built in XML support in Ruby considering how common XML is.
...maybe I can send the raw XML content to a Webdialog and have a JS parse it - feeding it back to Ruby. Not ideal - but I can't get any other solutions to work.
-
It's probably just a matter of getting the paths and require's right. Sometimes when require'ing a .so you might need to respect it's capitalization.
requires dezip.so'
require 'Dezip'
Append your $LOAD_PATH to include the library folder:
On windows (in SetchUp):
$LOAD_PATH.concat eval(
c:/ruby/bin/ruby.exe -e "p $:")
This appends the installed Ruby $LOAD_PATH to SketchUp. (Not well tested by me)
-
I'd like to make the lib work by not having full Ruby installed. Want to ship it as a normal SU plugin.
-
In basic terms this article may be helpful to explain the principle:
http://stackoverflow.com/questions/265879/can-ruby-import-a-net-dllIf you use IronRuby you may be able to write the XML parser .NET class by leveraging your curent ruby skills.
(You will need to do some homework to confirm that you could make the IronRuby .NET class com-visible though.)
Alternatively if you know java you could use J#.NET. -
I will try to look tomorrow when I get on my Windows machine and make a SU friendly package of a XML parser.
It all depends on what XML files you need to parse - if they are static, then you can write a specific XML parser yourself and save the troubles. I wouldn't use XML for anything, hate that format
-
There are several different uses for XML I'd like to use. I like the format, maybe from working with websites...
-
@unknownuser said:
I will try to look tomorrow when I get on my Windows machine and make a SU friendly package of a XML parser.
It all depends on what XML files you need to parse - if they are static, then you can write a specific XML parser yourself and save the troubles. I wouldn't use XML for anything, hate that format
hmm.. These XMl packages - are they PC only?
The nokogiri package has different packages for different platform. That could be a problem. I was hoping to find a cross platform solution. If REXML is cross platform I don't mind it's not too fast. But what troubles me with that is it's conflict with the Set class.
-
@thomthom said:
These XML packages - are they PC only?
almost everything that needs speed in Ruby is implemented as an extension, so it is platform dependent. some gems are precompiled (e.g. for Windows), others are in source form and compiled on user machine to gather additional speed on optimizations (e.g. Mac)
http://github.com/jnunemaker/happymapper sounds interesting but again, has a lot of requirements
-
Seeing how getting an XML parser working I think I will go for a custom format and make a simple parser that creates nested Hashes. In fact, I have to make my own Hash object as I want to traverse the Hash in the order the items where inserted.
But I'd still like to be able to read XML data from SU ruby. There's some other projects I'd like to use it which involves reading existing XML based files.
-
and? did you manage to get something working that could parse xml?
-
No - I've still not found a good solution.
Advertisement