Java XML getChildNodes problem

R

Ross

I'm having a mysterious problem reading XML files. For some reason,
Element.getChildNodes() works some of the time but not others.

Here's a simple XML file:

[test4.xml]
<document>

<blah>
word
</blah>

<blah>
word2
</blah>

<blah>
word3
</blah>

</document>
[end of test4.xml]

Here is a simple XML reading program, written to try to isolate the
error.

[TestXML.java]
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.util.*;

public class TestXML
{
public TestXML( File f ) throws IOException
{
Document doc = null;

try
{
DocumentBuilder builder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
FileInputStream fis = new FileInputStream( f );
doc = builder.parse( fis );
fis.close();
}
catch( IOException ioex )
{
throw ioex;
}
catch( Exception e )
{
e.printStackTrace();
throw new IOException( e.getMessage() );
}


print( doc.getDocumentElement(), 0 );
}

public void print( Element e, int tab )
{
put( tab );
System.out.println( "<" + e.getTagName() + ">" );

NodeList nl = e.getChildNodes();

for ( int index = 0; index < nl.getLength(); index++ )
{
Node n = nl.item( 0 );

put( tab + 8 );
System.out.println( "[Node type " + n.getNodeType() + "]" );

if ( n instanceof Text )
{
Text t = (Text) n;
put( tab + 8 );
System.out.print( t.getData() );
}
else if ( n instanceof Element )
{
Element e2 = (Element) n;
print( e2, tab + 8 );
}
}

System.out.println( "</" + e.getTagName() + ">" );
}

private void put( int tab )
{
for ( int index = 0; index < tab; index++ )
{
System.out.print( " " );
}
}

public static void main( String args[] ) throws IOException
{
TestXML tx = new TestXML( new File( args[0] ));
}
}
[end of TestXML.java]

But, when I run the program on the xml file, it doesn't find any of
the "blah" nodes.

[output]
<document>
[Node type 3]


[Node type 3]


[Node type 3]


[Node type 3]


[Node type 3]


[Node type 3]


[Node type 3]


</document>

[end of output]

Any advice? I just can't see what the error is. (Hopefully it won't be
another case of me spotting the error as soon as I post here :)
 
S

Steven Simpson

public void print( Element e, int tab )
{
put( tab );
System.out.println( "<" + e.getTagName() + ">" );

NodeList nl = e.getChildNodes();

for ( int index = 0; index < nl.getLength(); index++ )
{
Node n = nl.item( 0 );

Need any help kicking yourself? ;-)
 
R

Ross

Need any help kicking yourself?  ;-)


Ha! The advantage of a second set of eyes.

And, even though I wrote TextXML.java from scratch to investigate the
error, I made exactly the same error twice.

Something makes me think I need to leave programming until tomorrow
and do something else today :)

Thanks muchly.
 
D

Daniele Futtorovic

Something makes me think I need to leave programming until tomorrow
and do something else today :)

Hell, even leaving programming today and doing something else tomorrow
sounds great.

I'm tired... someone got a rich uncle I could inherit from?
 

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

Similar Threads


Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,008
Latest member
HaroldDark

Latest Threads

Top