Xml e java

9 respostas
N

ola a todos, tenho uma aplicação java que acede aos metodos remotos de um webservice, esses metodos devolvem a informação em xml.

Result =

180
180
170
176
188
167

como posso capturar a altura?

9 Respostas

Jair_Rillo_Junior

Dê uma estudada no framework JDOM http://jdom.org/

R

Usa o Xstream é bem mais facil de usar, ele faz o mapeamento direto para POJOs (JavaBeans), Listas:
http://xstream.codehaus.org/

N

segui um tutorial aqui do forum e fiz o seguinte:

import <a href="http://java.io">java.io</a>.<em>;

import <a href="http://java.net">java.net</a>.</em>;

import java.util.<em>;

import javax.xml.parsers.</em>;

import org.w3c.dom.*;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import  javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.SAXException;

/**

*

*/
public class Main {

/** Creates a new instance of Main Xenon*/
public Main() {
}

/**
 * @param args the command line arguments
 */
public static void main(String[] args)  {
    // TODO code application logic here
    
    try { 
        System.out.println("main programa");
        LeXml();               
      
    } catch (Exception ex) {
        // TODO handle custom exceptions here
    }        
}
//################################################################
 private static void LeXml( ) throws SAXException, IOException  
{
      String pesoAtomico="";
     try
     {
        
        // Call Web Service Operation
        javaapplication15.Periodictable service = new javaapplication15.Periodictable();
        javaapplication15.PeriodictableSoap port = service.getPeriodictableSoap();
        // TODO initialize WS operation arguments here
        java.lang.String elementName = "Xenon";
        // TODO process result here
        java.lang.String result = port.getAtomicWeight(elementName);  
        
        System.out.println("Peso = "+ result);
        
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
        DocumentBuilder db = dbf.newDocumentBuilder();  
        Document doc = db.parse(result);  
        
        Element elem = doc.getDocumentElement();
         
          NodeList nl = elem.getElementsByTagName("Table");                           
         
       for( int i=0; i<nl.getLength(); i++ )
        {
         Element tagTable = (Element) nl.item( i );
   
         // pega os dados cadastrado para o usuario atual
          pesoAtomico = getChildTagValue( tagTable, "Altura" );           
       
     }
     }
     catch(Exception ex)
     {
     
     
     }
    
 }   

//#################################################################
private static String getChildTagValue( Element elem, String tagName )  
{
  
    NodeList children = elem.getElementsByTagName( tagName );
     if( children == null ) return null;
         Element child = (Element) children.item(0);
     if( child == null ) return null;
     return child.getFirstChild().getNodeValue();
 }



//################################################################

}

do webservice retorna um xml com a seguinte estrutura

131.3

tentei correr coloquei um system.out.println() e o problema parece estar nas seguintes linhas de codigo:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();

Document doc = db.parse(result);

agradecia a vossa ajuda.

N

o erro é na instruçao :
Document doc = db.parse(result);

volto a referir que eu nao leio o conteudo de um ficheiro xml, em result tenho o que é retornado de um a chamada a um metodo remoto de um webservice.

N

será que ninguem me pode ajudar?

Jair_Rillo_Junior

Acho que ninguem vai ficar lendo o seu codigo (ainda mais fora da tag CODE) e tentar adivinhar o erro
Por favor, poste também qual exception ocorre. Alias, tente pesquisar antes sobre a Exception no google, provavelmente você irá encontrar a resposta para o seu problema

N

na instrução ->Document doc = db.parse(result); dá o seguinte erro:
A sintaxe do nome do ficheiro, do nome do directório ou do nome de volume é incorrecta

a variavel result nao tem o caminho para o ficheiro xml , mas sim o resultado de um webservice quem esta em formato xml mas esses dados são guardados numa variavel string result

Jair_Rillo_Junior

tente usar o JDOM, ele pode fazer o parse de uma variavel String

jMacaxera

Uma outra alternativa é utilizar o JAXB. =)

Criado 28 de novembro de 2007
Ultima resposta 30 de nov. de 2007
Respostas 9
Participantes 4