[jdom-interest] Re: Not finding attributes on an element
    Scott Ellsworth 
    scott at alodar.com
       
    Mon Jul 30 19:49:40 PDT 2001
    
    
  
It appears that the lookup for the namespace is failing in 
SAXHander.startElement.  There may be something ill formed, so I created a 
small XML file and java source file that produce the error.
Code and xml are attached, but if you look at this block in the above 
function in SAXHandler.java:
if (attLocalName != attQName) {
     String attPrefix = attQName.substring(0, attQName.indexOf(":"));
       System.out.println("SXBuilding attPrefix "+attPrefix);
       System.out.println("ns: "+getNamespace(attPrefix));
     attribute = factory.attribute(attLocalName, atts.getValue(i),
                  getNamespace(attPrefix));
   } else {
     attribute = factory.attribute(attLocalName, atts.getValue(i));
   }
   element.setAttribute(attribute);
I see the following in my log file:
SAXHandler.startElement("http://iceweasel.com/xml/RQbyScott", "skill", 
"RQbyScott:skill" , org.xml.sax.helpers.AttributesImpl at 60420f)
The attributes logged by
cat.error("attr "+i+": "+attLocalName+" "+attQName);
are
  attr 0: is_rune_skill RQbyScott:is_rune_skill
So we see that the attribute Qname has the namespace.
cat.error("attPrefix "+attPrefix);
produced
attPrefix RQbyScott
so the namespace was grabbed.
When looked up with
cat.error("ns: "+getNamespace(attPrefix));
I saw:
[Namespace: prefix "" is mapped to URI ""]
Thus, for some reason, it is not being found.
For the curious: read the following:
<?xml version="1.0" encoding="UTF-8"?>
<RQbyScott:character xmlns:RQbyScott="http://iceweasel.com/xml/RQbyScott">
	<RQbyScott:skill RQbyScott:is_rune_skill="true">
	<RQbyScott:skill_name>Dodge</RQbyScott:skill_name>
	</RQbyScott:skill>
</RQbyScott:character>
with
package com.standingstones.gaming.rqCharacter;
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.SAXBuilder;
import org.apache.log4j.Category;
import org.apache.log4j.PropertyConfigurator;
public class RQCharacter{
     static Category cat = Category.getInstance(RQCharacter.class.getName());
     static {
         PropertyConfigurator.configure("RQCharacter.lcf");
     }
	public static void main(String[] args){
		Namespace ns=Namespace.getNamespace("RQbyScott", 
"http://iceweasel.com/xml/RQbyScott");
		BufferedInputStream instream=null;
		try{
			SAXBuilder builder=new SAXBuilder(false);
			instream=new BufferedInputStream(new FileInputStream(new 
File("test.xml")), 10000);
			try{
				Document doc=builder.build(instream);
				Element elem=doc.getRootElement();
				cat.info("Root: "+elem);
				Element skill=elem.getChild("skill", ns);
				String name=skill.getChildText("skill_name", ns);
				cat.debug("Reading "+name);
				List attributes=skill.getAttributes();
				String uri = ns.getURI();
				cat.debug("ns "+ns);
				Iterator i = attributes.iterator();
				while (i.hasNext()) {
					Attribute att = (Attribute)i.next();
					cat.debug("Att "+att+" has namespace URI "+att.getNamespaceURI());
				}
			}
			finally{ if (instream!=null) instream.close(); }
		}
		catch(IOException e) { cat.error("Error reading test.xml",e); }
		catch(JDOMException e){ cat.error("Error parsing test.xml",e); }
	}
}
Scott
Scott Ellsworth
scott at alodar.com
    
    
More information about the jdom-interest
mailing list