PDA

View Full Version : [JAVA] un parser XML


trapanator
07-10-2004, 15:45
Sapete consigliarmi uno?
Possibilmente con qualche esempio.
Grazie ;)

texerasmo
07-10-2004, 15:57
// ti restiuisce outpu di trasformazione
outputTrs = creaHtml(xmlfile,xslfile);



<%!
public String creaHtml(String fileXml,String xslFile)
{
StringWriter fileHtml = new StringWriter();
try
{

TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(new StreamSource(xslFile));
//transformer.setParameter("prova",xsl_par);
transformer.transform(new StreamSource(fileXml), new StreamResult(fileHtml));
}
catch(Exception exc)
{
return "Errore:"+ exc.getMessage();
}
return fileHtml.toString();
}
%>

trapanator
08-10-2004, 09:05
Originariamente inviato da texerasmo
// ti restiuisce outpu di trasformazione
outputTrs = creaHtml(xmlfile,xslfile);



<%!
public String creaHtml(String fileXml,String xslFile)
{
StringWriter fileHtml = new StringWriter();
try
{

TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(new StreamSource(xslFile));
//transformer.setParameter("prova",xsl_par);
transformer.transform(new StreamSource(fileXml), new StreamResult(fileHtml));
}
catch(Exception exc)
{
return "Errore:"+ exc.getMessage();
}
return fileHtml.toString();
}
%>


Interessante, pero' mi servirebbe come accedere al valore di un elemento... ad esempio:

<...>

<service>
<name>Prova</name>
<...>
</service>

vorrei il valore di <name> :)

texerasmo
08-10-2004, 09:26
sul forum dovrebbe esserci gia quaḷcosa sollevai tempofa io la stessa questione

texerasmo
08-10-2004, 09:27
/*
IMPORTIAMO I PACKAGE NECESSARI PER
LAVORATE CON GLI XML
/**/
import org.apache.xerces.parsers.DOMParser;
import org.xml.sax.ErrorHandler;
import org.w3c.dom.*;
import java.io.IOException;

public class LeggiXML
{
/*
COSTRUTTORE CON UN PARAMETRO
CHE RAPPRESENTA IL FILE DA LEGGERE
/**/
public LeggiXML(String xmlFile)
{
/*
ANCHE PER LEGGERE UN XML DOBBIAMO
UTILIZZARE IL PARSER XERCES QUINDI
ISTANZIAMO UN OGGETTO DOMParser
/**/
DOMParser parser = new DOMParser();

try
{
/*
IMPOSTIAMO I PARAMETRI PER IL PARSER
/**/
parser.setFeature("http://xml.org/sax/features/validation", true);
}catch (Exception e)
{
System.err.println (e);
}

try
{
/*
PARSIAMO IL DOCUMENTO CON XERCES
/**/
parser.parse(xmlFile);

/*
ISTANZIAMO UN OGGETTO DOCUMENT
/**/
Document document = parser.getDocument();

/*
PASSIAMO IL NOSTRO DOCUMENT AL METODO
leggi() CHE LO SCORRE RICORSIVAMENTE
/**/
leggi(document,0);
} catch (Exception e)
{
System.err.println(e);
}
}

/*
METODO CHE SCORRE RICORSIVAMENTE
TUTTI I NODI DEL DOCUMENTO XML. IN
ENTRATA PRENDE L'OGGETTO Node DA
PARSARE ED UN INTERO CHE RAPPRESENTA
IL LIVELLO
/**/
private void leggi(Node node, int numLevelsDeep)
{
int type = node.getNodeType();
if (type == Node.ELEMENT_NODE)
{
/*
SE IL NODO RILEVATO HA VALORE <param-name>
IL VALORE IN ESSO CONTENUTO VIENE STAMPATO
A VIDEO
/**/
if("param-name".equals(node.getNodeName()))
{
System.out.print("\n"+node.getFirstChild().getNodeValue());

/*
SE IL NODO RILEVATO HA VALORE <param-value>
IL VALORE IN ESSO CONTENUTO VIENE STAMPATO
A VIDEO
/**/
}else if("param-value".equals(node.getNodeName()))
{
System.out.print("\n"+node.getFirstChild().getNodeValue());
}
}

/*
SE IL NODO HA NODI FIGLI RICHIAMIAMO
IL METODO leggi() PASSANDOGLI IL NODO
ED IL NUMERO DI LIVELLO CORRENTE + 1
/**/
NodeList children = node.getChildNodes();

if (children != null)
{

for (int i=0; i<children.getLength(); i++)
{
leggi(children.item(i), numLevelsDeep+1);
}
}
}

/*
METODO MAIN DI ESECUZIONE
/**/
public static void main(String[] args)
{
LeggiXML leggi = new LeggiXML(args[0]);
}
}

prova cosi