REXML Question

M

mike leonard

I'm looking at REXML as a possible alternative to some things I've been
doing with XSLT, but I haven't the foggiest notion of how to accomplish
even the simplest transformations. Using REXML, how would I go about,
say, translating all <em>'s into <emph>'s, or all <chapter>'s into <div
type="chapter">'s?

Thank you kindly in advance,

Mike
 
J

James Britt

mike said:
I'm looking at REXML as a possible alternative to some things I've been
doing with XSLT, but I haven't the foggiest notion of how to accomplish
even the simplest transformations. Using REXML, how would I go about,
say, translating all <em>'s into <emph>'s, or all <chapter>'s into <div
type="chapter">'s?

Have you tries brute-force regexp?

If that isn't a suitable option, use the stream or pull parser to
traverse the document and do the substitution as each element is
encountered.

There should be an article on this topic coming up in Dr. Dobbs, but it
may not appear for a month or so.



James


--

http://www.ruby-doc.org - The Ruby Documentation Site
http://www.rubyxml.com - News, Articles, and Listings for Ruby & XML
http://www.rubystuff.com - The Ruby Store for Ruby Stuff
http://www.jamesbritt.com - Playing with Better Toys
 
P

Phlip

mike said:
I'm looking at REXML as a possible alternative to some things I've been
doing with XSLT, but I haven't the foggiest notion of how to accomplish
even the simplest transformations. Using REXML, how would I go about,
say, translating all <em>'s into <emph>'s, or all <chapter>'s into <div
type="chapter">'s?

Thank you kindly in advance,

REXML is a DOM-style parser, not a transformer.

To do what you said, off the top of my head I would ...

doc = Document.new(File.read('some.xml'))
XPath.each(doc, '//em') do
|node|
node.name = 'emph' # or similar; check the members first
end
doc.write(File.open(''another.xml')) # or similar to write

There; a transformation in a bottle. Because XPath.each() returns the actual
DOM nodes inside the parsed tree, and because writing on these nodes changes
that tree, you can loop thru the nodes and manipulate them using clever
XPath expressions. The system will accomodate most of the XML rules for you.
 
M

mike leonard

Thanks for the replies. Actually, it was Fowler's article that piqued
my interest in using REXML for transformations, but I didn't know the
first thing about it. Phlip's example above is just what I was looking
for. Incidentally, Phlip, what do you mean by "check the members first"?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,756
Messages
2,569,534
Members
45,007
Latest member
OrderFitnessKetoCapsules

Latest Threads

Top