REXML Question

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

mike leonard wrote:

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

mike leonard wrote:

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.

···

--
  Phlip
  greencheese.org <-- NOT a blog!!!

Fowler wrote about this a couple of years ago

/Marcus

mike leonard wrote:

···

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

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"?

If you expect to be doing a variety of transformations, I would recommend
not doing mutations on the source xml tree, but instead creating a
transformed copy of that tree. Straight Ruby works fine for that (much
better than xslt, imho).

"Phlip" <phlipcpp@yahoo.com> wrote in message
news:sv4Ze.1011$rx5.601@newssvr22.news.prodigy.net...

mike leonard wrote:

> 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.

···

--
  Phlip
  greencheese.org <-- NOT a blog!!!