lectura de un XML

Mikel
24 de Enero del 2006
Hola.
Tengo problemas a la hora de cargar un XML y obtener los nodos y sus respectivos valores.
He probado con un par de opciones y nada de nada.
La primera opcion con el api DOM:

public Document crearDocDOM(String fichero)
{
////1º se crea el objeto q va a almacenar el xml
org.w3c.dom.Document docXML=null;
try
{
com.ibm.xml.parsers.DOMParser parser = new com.ibm.xml.parsers.DOMParser();
parser.parse(fichero);
docXML = parser.getDocument();
}
catch (Exception e)
{
e.printStackTrace();
}
return docXML;
}

//Con este sacas los valores:

public void leerDocDOM(Document docDOM)
{
Element elemDOM=docDOM.getDocumentElement();
NodeList listaNodos = elemDOM.getElementsByTagName("*");

for(int i=0; i< listaNodos.getLength(); i++)
{
Element elem= (Element)listaNodos.item(i);
Node miNodo = listaNodos.item(i);

String nombreNodo= miNodo.getNodeName();
String valorNodo = miNodo.getFirstChild().getNodeValue();

System.out.println("valornodo "+valorNodo+" valornodo");

System.out.println(nombreNodo + ":::" + valorNodo );
}
}

No puede leer el valor del primer nodo, el nombre si que lo lee

Y la otra con el api JSR 188 (especifico para perfiles CC/PP):

public Profile getProfileFromFile(String ccppFile) throws FileNotFoundException {
ProfileFactory pf = ProfileFactoryImpl.getInstance();
//ProfileFactory.setInstance(pf);

System.out.println("1 "+pf.toString());

ProfileFragmentFactory ff = ProfileFragmentFactoryImpl.getInstance();
//ProfileFragmentFactory.setInstance(ff);

System.out.println("2 "+ff.toString());

//Configure the vocabulary
DescriptionManager dm = DescriptionManager.getInstance();

System.out.println("3 "+dm.toString());

try {
// set the schema
File schema = new File("vocabulary.xsd");

System.out.println("4 "+schema.getAbsolutePath());

DescriptionManager.setSchema(schema);

File vocab = null;
vocab = new File("ccppschema-20010430.xml");
dm.addVocabulary(vocab);
vocab = new File("ccppschema-20010430a.xml");
dm.addVocabulary(vocab);
vocab = new File("ccppschema-20010430b.xml");
dm.addVocabulary(vocab);

System.out.println("5 "+dm.hashCode());

} catch(Exception e) {
e.printStackTrace();
}

File f = new File(ccppFile);

System.out.println("IMPORT "+f.getAbsolutePath());
System.out.println("IMPORT "+f.getName());

// Read the CC/PP profile from a file
InputStream is = new FileInputStream(ccppFile);
//InputStream is = new FileInputStream(f);

System.out.println("6 "+is.toString());

ProfileFragment pfa[] = new ProfileFragment[1];
//crea un array de una dimension

System.out.println("7 "+pfa.length);

pfa[0] = ff.newProfileFragment(is);

System.out.println("8 "+pfa[0].toString());

System.out.println("9 "+ff.newProfileFragment(is).toString());

System.out.println("10 "+pf.newProfile(pfa));

return pf.newProfile(pfa);

}

// Given a profile, list its attribute name/value pairs
public void processProfile(Profile profile) {
Set comps = profile.getComponents();
for(Iterator i = comps.iterator(); i.hasNext(); ) {
Component comp = (Component) i.next();
System.out.println("Component: " + comp.getName());

Set attrs = comp.getAttributes();

for(Iterator j = attrs.iterator(); j.hasNext(); ) {
Attribute attr = (Attribute) j.next();
Object value = attr.getValue();
System.out.println("tAttribute: " + attr.getName() +
" = " + attr.getValue());
}
}
}

La funcion getProfileFromFile me devuelve un perfil nulo.
Los vocabularios y los esquemas estan bien, seguro.

Agredeceria que alguien me pudiera ayudar.
Adios

neossoftware
24 de Enero del 2006
Porque no pruebas con la API de Jakarta Digester, creo que te vas a evitar varios dolores de cabeza

http://jakarta.apache.org/commons/digester/

Saludos!!!!