lectura de un XML
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
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