<html>
<body>
Sounds like it would be easier to use JSP with custom tags, if your
environment permits.<br><br>
At 2006-05-06 01:14, Leonardo Barbosa wrote:<br>
<blockquote type=cite class=cite cite="">First of all, thanks everybody
for your help!<br>
And sorry about the reply for your email, I didn't see it.<br><br>
OK, here is an example of my template:<br><br>
... <br>
<a href="$LINK.htm">$LINK </a>.. <br>
So, as you can see, I have &lt;brtpchamada&gt;, &lt;brtpolho&gt; and
&lt;brtptitulo&gt;<br>
proprietary tags. These are responsable to map where and what kind
of<br>
data should be there.<br>
I use to have a &lt;brtplink&gt; to indicate where where I should create
the<br>
&lt;a href=&quot;&quot;&gt;. But now I need to worry about javascript's,
inside every<br>
tag (&lt;img&gt;, &lt;a&gt;, etc), and in the text of all elements.
Actually, all<br>
elements that are inside the &lt;brtpchamada&gt; tag. Thats where come
the<br>
context problem: the $LINK in the &lt;brtpchamada&gt; with
id=&quot;1&quot; is<br>
diferente from the $LINK in the &lt;brtpchamada&gt; with
id=&quot;2&quot;. So, to<br>
create the replacement list, I do this:<br><br>
HashMap replacement = new HashMap();<br><br>
Iterator chamadaIterator = root.getDescendants(new<br>
ElementFilter(&quot;brtpchamada&quot;));<br>
while (chamadaIterator.hasNext()) {<br>
&nbsp;&nbsp;&nbsp; // read stuf from the database for this chamada, with
id = 1 or id<br>
= 2 for this example<br><br>
&nbsp;&nbsp;&nbsp; // ElementStartsFilter is a new filter that I created
to filter,<br>
as the name says, only<br>
&nbsp;&nbsp;&nbsp; // elements that starts with &quot;brtp&quot;.<br>
&nbsp;&nbsp;&nbsp; Iterator filhosIterator =
chamadaTagAtual.getDescendants(new<br>
ElementStartsFilter(&quot;brtp&quot;));<br>
&nbsp;&nbsp;&nbsp; while (filhosIterator.hasNext()) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element filhoTagChamadaAtual =
(Element) filhosIterator.next();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Element conteudoTag = new
Element(&quot;abc&quot;);<br><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // do some processing here,
acording to this &lt;chamada&gt; tag,<br>
and modify conteudoTag<br><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
replacement.put(filhoTagChamadaAtual, conteudoTag);<br>
&nbsp;&nbsp;&nbsp; }<br>
}<br><br>
// This funcion replaces the key of the hashmap for the value in the
document<br>
replaceAllTags(replacement);<br><br>
Now is the trick part: for every content inside the &lt;chamada&gt; tag,
I<br>
need to replace $LINK for a SPECIFIC url to this &lt;brtpchamada&gt; (id
= 1<br>
or id = 2 in this template that I used for example).<br><br>
Now, how can I do that? Or am I freaking out the porpouse of
getDescendents? :-)<br><br>
After Thomas reply, I thought about to do somenthing like this (of<br>
course I will need to learn the java.util.regex.* first ;-)<br><br>
String document = LoadFile(&quot;document.tpl&quot;);<br><br>
// supose for a minute that its like perl :-)<br>
while(document.matches(&quot;&lt;brtpchamada&gt;(.+)&lt;/brtpchamada&gt;&quot;)){<br>
&nbsp;&nbsp;&nbsp; String content = document.lastMatch();<br>
&nbsp;&nbsp;&nbsp; content.replaceAll(&quot;&lt;brtptitulo\&gt;&quot;,
getDataForThis());<br>
&nbsp;&nbsp;&nbsp; content.replaceAll(&quot;LINK&quot;,
getLinkForThis());<br>
&nbsp;&nbsp;&nbsp; // etc<br>
&nbsp;&nbsp;&nbsp;
document.replaceAll(&quot;&lt;brtpchamada&gt;(.+)&lt;/brtpchamada&gt;&quot;,
contet);<br>
}<br><br>
but the problem here is that I would need to grep all atributes, to<br>
get &lt;brtpchamada id=&quot;1&quot;&gt; id for example, replace empty
tags or not<br>
empty tags (&lt;brtptitulo/&gt; could be
&lt;brtptitulo&gt;...&lt;/brtptitulo&gt; for<br>
example), and do all that stuff that I think jdom does much better<br>
then I do...<br><br>
I hope I was more clear at this time.<br><br>
Best reagards and thanks again,<br>
Leonardo Barbosa<br><br>
On 5/5/06, Edelson, Justin &lt;Justin.Edelson@mtvn.com&gt; wrote:<br>
&gt;<br>
&gt; I was actually suggesting (as did Thomas) to not use JDOM at all and
just<br>
&gt; use regex across the whole document. But now you're saying that
the<br>
&gt; replacement text is somehow related to the context within the XML
document.<br>
&gt;<br>
&gt; Can you provide some more detail?<br>
&gt;<br>
&gt; And please respond to the list, not to me individually.<br>
&gt;<br>
&gt; Justin<br>
&gt;<br>
&gt;&nbsp; ________________________________<br>
&gt;&nbsp; From: Leonardo Barbosa
[<a href="mailto:lsbarbosa@gmail.com" eudora="autourl">
mailto:lsbarbosa@gmail.com</a>]<br>
&gt; Sent: Friday, May 05, 2006 4:38 PM<br>
&gt; To: Edelson, Justin<br>
&gt; Subject: Re: [jdom-interest] Text replacement<br>
&gt;<br>
&gt;<br>
&gt; Thanks Justin!<br>
&gt;<br>
&gt; Infact, the problem with creating the string and using replaceAll is
that I<br>
&gt; don't have the output ready at this time. I'm iterating over the
&lt;chamada&gt;<br>
&gt; tags and, for each one, I need to replace all ocurrences of
$REPLACE_THIS<br>
&gt; with a spacific value, for that &lt;chamada&gt; tag. To be more
specific, each<br>
&gt; &lt;chamada&gt; tag has a url associated with it, according to it's
position in<br>
&gt; the XML.<br>
&gt;<br>
&gt; So, to replace using replaceAll, wouldnt I need to create an String
out<br>
&gt; using XMLOutputter for each &lt;chamada&gt; tag, and them use the
SAXParser to<br>
&gt; create the JDOM model again, and atach this new JDOM model to the
old one?<br>
&gt;<br>
&gt; I mean, I can't reaplace in the and, when I finish processing the
document,<br>
&gt; beacause its the same string $REPLACE_ALL with diferent values.. I
could ask<br>
&gt; the client to use diferente names, but i could generate errors, I
upset him<br>
&gt; :-)<br>
&gt;<br>
&gt; Thanks again for your help,<br>
&gt; Leonardo Barbosa.<br>
&gt;<br>
&gt;<br>
&gt; On 5/5/06, Edelson, Justin &lt;Justin.Edelson@mtvn.com &gt;
wrote:<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; I'd first look at whether or not you need ANY kind of XML
processing for<br>
&gt; this. If all you are doing is replacing $REPLACE_THIS with some
string, then<br>
&gt; you could just get the template into a String object and do<br>
&gt; &gt; string.replaceAll(&quot;\$REPLACE_THIS&quot;,
replacementString);<br>
&gt; &gt; (because replaceAll expects a RegEx, you need to escape the
dollar sign)<br>
&gt; &gt;<br>
&gt; &gt; Doing this wouldn't even require &quot;tidying&quot; up the
doc.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; ________________________________<br>
&gt;&nbsp; From: jdom-interest-bounces@jdom.org<br>
&gt;
[<a href="mailto:jdom-interest-bounces@jdom.org" eudora="autourl">
mailto:jdom-interest-bounces@jdom.org</a>] On Behalf Of Leonardo
Barbosa<br>
&gt; &gt; Sent: Friday, May 05, 2006 2:10 PM<br>
&gt; &gt; To: jdom-interest@jdom.org<br>
&gt; &gt; Subject: [jdom-interest] Text replacement<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Hi!<br>
&gt; &gt;<br>
&gt; &gt; I'm new to jdom and xml, so sorry if this is non sense.<br>
&gt; &gt; I read a xml template (a html to be true, transformed to XML
using tidy)<br>
&gt; file from my client, and want to change all ocurrences of one text
to<br>
&gt; something else. It will probably be inside some javascript,
something like<br>
&gt; &gt; &lt;a href=&quot;#&quot;<br>
&gt; onclick=&quot;javascript:openLink($REPLACE_THIS);&quot;&gt;<br>
&gt; &gt;<br>
&gt; &gt; bu could be in the text of some &lt;script&gt; tag for
example:<br>
&gt; &gt; &lt;script&gt;<br>
&gt; &gt; funcion onclick(){<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
opeanUrl(&quot;REPLACE_THIS&quot;);<br>
&gt; &gt; }<br>
&gt; &gt; &lt;/script&gt;<br>
&gt; &gt;<br>
&gt; &gt; There only one more thing: It needs to be inside some tag, the
one that<br>
&gt; defines the link url:<br>
&gt; &gt;<br>
&gt; &gt; &lt;chamada&gt;<br>
&gt; &gt; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a
href=&quot;#&quot;<br>
&gt; onclick=&quot;openLink($REPLACE_THIS);&quot;&gt;click
here&lt;/a&gt;<br>
&gt; &gt; &lt;/chamada&gt;<br>
&gt; &gt;<br>
&gt; &gt; &lt;chamada&gt;<br>
&gt; &gt; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a
href=&quot;#&quot;<br>
&gt;
onclick=&quot;openLink($REPLACE_THIS);&quot;&gt;$REPLACE_THIS&lt;/a&gt;<br>
&gt; &gt; &lt;/chamada&gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Is there a way to do this with jdom API, without getting all
Descendents<br>
&gt; from the tag &lt;chamada&gt; and looking inside its Text and
Attributes ?<br>
&gt; &gt; something like:<br>
&gt; &gt;<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Iterator
chamadaIterator = root.getDescendants (new<br>
&gt; ElementFilter(&quot;chamada&quot;));<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while
(chamadaIterator.hasNext()) {<br>
&gt;
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Element chamadaTag = (Element) chamadaIterator.next();<br>
&gt;
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
chamadaTag.setTextReplacement(&quot;$REPLACE_THIS&quot;, &quot;<br>
&gt;
<a href="http://www.thinkgeek.org/" eudora="autourl">
http://www.thinkgeek.org</a>&quot;);<br>
&gt; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt; &gt;<br>
&gt; &gt; I've searched the forum and found some ideas aboute html
entities, but it<br>
&gt; seams to be not the case, since I have one value for the whole
document.<br>
&gt; &gt;<br>
&gt; &gt; I no that it seeas to be lazyness :-)<br>
&gt; &gt; But in fact I'm trying to avoid some desnecessary loop inside
all<br>
&gt; elements, all texts from theese elements, and all attributes from
theese<br>
&gt; elements.<br>
&gt; &gt;<br>
&gt; &gt; Thanks in advance,<br>
&gt; &gt; Leonardo Barbosa<br>
&gt; &gt; lsbarbosa@gmail.com</blockquote></body>
</html>