You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@velocity.apache.org by Mike J Boyersmith <mj...@us.ibm.com> on 2005/01/18 19:40:23 UTC

JDOM and NOT using anakia ant task

Its my understanding that if I want to use Anakia it needs to be ran from 
an ant build script?
so...... I want to execute a template against a loaded JDOM. like the 
following:

SAXBuilder builder;
Document root = null;
builder = new SAXBuilder("org.apache.xerces.parsers.SAXParser" );
root = builder.build( XMLFile );
 
//Stuff the Document (or root Element) into the context:
VelocityContext context = new VelocityContext();
context.put("root", root );

/* write to file */
BufferedWriter writer = writer = new BufferedWriter(
new FileWriter("./output/StartPage.html"));

if ( template != null)
   template.merge(context, writer);


BUT I am not having a whole lot of luck with it parsing my DOM correctly. 
I can dump my JDOM and it shows the tree correctly. 
but I am having problems doing simple things like getting at elements. 
heres an example

I have the following data

<?xml version="1.0" encoding="UTF-8"?>
<publish:project name="Published Items" xmlns:publish="http://a/b/c">
  publish project
<foo>
this is foo
</foo>
<publish:link>
 publish link 1
</publish:link>
<publish:link>
 publish link 2
</publish:link>
</publish:project>

I'm TRYING to get output text for <publish:link> but no matter what I try 
I can't seem to get
the element. sigh...... I suspect I'm running into a namespace problem. If 
I try to fetch <foo> it works, but
if I try to fetch <publish:link> it doesn't. Any ideas?????


Heres what I have tried in my script file(note the r, s, t, u, a , b, c , 
d is just to identify my output easier)

<html>
...
    <body>
-------------see what kinds of URI, or prefixes we can fetch 
---------------<br>
r $root.getPrefix()<br>
s $root.getRootElement().getPrefix()<br>
t $root.getNamespaceURI()<br>
u $root.getRootElement().getNamespaceURI() //Works: RETURNS http://a/b/c

------ now try to get stuff --- <br>

a $root.getRootElement().getChild("foo").getText()<br>  //WORKS: returns 
text of foo element

------------ Everything from here on FAILS to do anything <br>
------------ (I got to the point of trying everything I could think 
of..and nadda working)<br>

b $root.getRootElement().getChild("publish:project", 
"http://a/b/c").getText()<br>
c $root.getRootElement().getChild("publish:project", 
"http://a/b/c").getText()<br>
d $root.getRootElement().getChild("project", "http://a/b/c").getText()<br>
e $root.getRootElement().getChild("project").getText()<br> 
f $root.getRootElement().getChild("publish:link").getText()<br>
g $root.getRootElement().getChild("link", "http://a/b/c" ).getText()<br>
h $root.getRootElement().getChild("publish:link", "http://a/b/c" 
).getText()<br>
i $root.getRootElement().getChild("link", "publish").getText()<br>
j $root.getRootElement().getChild("publish:link", "publish").getText()<br>
k $root.getRootElement().getChild("link").getText()<br> 

--------------------Try to get from getChild() directly  -------<br>
l $root.getChild("publish:link").getText()<br>
m $root.getChild("link", "http://a/b/c" ).getText()<br>
n $root.getChild("publish:link", "http://a/b/c" ).getText()<br>
o $root.getChild("link", "publish").getText()<br>
p $root.getChild("publish:link", "publish").getText()<br>
q $root.getChild("link").getText()<br>

    </body>
</html>



Re: JDOM and NOT using anakia ant task (figured out the Namespace problem)

Posted by Mike J Boyersmith <mj...@us.ibm.com>.
Ok figured out the problem. I have to get an actual namespace object and 
pass it, versus just
passing the namespace text. 



>>I can dump my JDOM and it shows the tree correctly. 
>>but I am having problems doing simple things like getting at elements. 
>>heres an example
>>...
>>I'm TRYING to get output text for <publish:link> but no matter what I 
try 
>>I can't seem to get
>>the element. sigh...... I suspect I'm running into a namespace problem. 
If 
>>I try to fetch <foo> it works, but
>>if I try to fetch <publish:link> it doesn't. Any ideas?????