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