Sto scrivendo un Java servlet in Eclipse (per essere ospitato su Google App Engine) e ho bisogno di elaborare un documento XML. Quali librerie sono disponibili che sono facili da aggiungere a un progetto Eclipse e hanno un buon codice di esempio?Quali librerie ci sono per l'elaborazione di XML su Google App Engine/Java Servlet
risposta
Ho finito per utilizzare JAXP con l'API SAX.
Aggiungendo qualcosa come il seguente al mio servlet:
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;
....
InputStream in = connection.getInputStream();
InputSource responseXML = new InputSource(in);
final StringBuilder response = new StringBuilder();
DefaultHandler myHandler = new DefaultHandler() {
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if (localName.equals("elementname")) {
response.append(attributes.getValue("attributename"));
inElement = true;
}
}
public void characters(char [] buf, int offset, int len) {
if (inElement) {
inElement = false;
String s = new String(buf, offset, len);
response.append(s);
response.append("\n");
}
}
};
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser parser = factory.newSAXParser();
parser.parse(responseXML, myHandler);
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
in.close();
connection.disconnect();
....
Xerces (che fornisce sia SAX e le implementazioni DOM) e Xalan (che fornisce il supporto per le trasformazioni) - entrambi sono stati in bundle con il JDK dal 1.5 e sono quindi già configurato in un Java standard di installazione
Dipende che cosa il vostro gli obiettivi sono suppongo. Ho usato JAXB per il marshalling/unmarshalling xml per oggetti Java ed è abbastanza veloce, facilmente estensibile e ha un buon supporto per la comunità.
Se non vuoi scrivere schemi e cosa no, allora ho avuto fortuna con dom4j e ha una curva di apprendimento più piccola.
Yuck, voglio elaborare XML; Non voglio dover scrivere niente da solo, quindi JAXB è fuori. –
È inoltre possibile utilizzare le annotazioni per contrassegnare gli oggetti a cui si desidera associare. Personalmente non ho usato questo approccio ma ti farebbe risparmiare dover scrivere uno schema. Devo ammettere che JAXB può facilmente essere eccessivo per molte applicazioni. –
JDom ha un'interfaccia migliore (più semplice) rispetto agli apis Java XML standard.
è possibile utilizzare esattamente le stesse librerie utilizzate in un ambiente non servlet.
LOL - Stavo pensando la stessa cosa ... –
Beh, non tutto funziona su GAE ... – Thilo
Un'altra scelta, che ha una velocità migliore di Xerces (l'ultima volta che li ho confrontati) era Saxon.
È possibile utilizzare JDOM che richiede xerces SAXParser. Tuttavia, AppEngine non fornisce la libreria xerces. Puoi aggiungerlo copiandolo nella piega WEB-INF/lib del tuo progetto.
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
String content = req.getParameter("content");
Document doc = parseXml(content);
resp.setContentType("text/plain");
if (doc != null)
{
resp.getWriter().println(doc.getDocumentElement().getNodeName());
}
else
{
resp.getWriter().println("no input/bad xml input. please send parameter content=<xml>");
}
}
private static Document parseXml(String strXml)
{
Document doc = null;
String strError;
try
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
StringReader reader = new StringReader(strXml);
InputSource inputSource = new InputSource(reader);
doc = db.parse(inputSource);
return doc;
}
catch (IOException ioe)
{
strError = ioe.toString();
}
catch (ParserConfigurationException pce)
{
strError = pce.toString();
}
catch (SAXException se)
{
strError = se.toString();
}
catch (Exception e)
{
strError = e.toString();
}
log.severe("parseXml: " + strError);
return null;
}
- 1. Quali librerie di serie temporali .NET ci sono?
- 2. Quali app su Google Play sono create utilizzando Qt?
- 3. Google Ads non supporta HTTPS. Quali alternative ci sono?
- 4. Quali equivalenti ci sono per TortoiseSVN, su Mac OSX?
- 5. Quali alternative Visio per Mac ci sono?
- 6. Ci sono buone librerie di controllo WPF là fuori?
- 7. Quali font di sistema sono disponibili per PIL su Google App Engine?
- 8. Quali librerie JavaScript ben note si trovano su CDN e quali sono gli URL?
- 9. Ci sono delle panoramiche su guava?
- 10. Quali librerie di oggetti di simulazione sono disponibili per D?
- 11. Quali sono le librerie Java più importanti?
- 12. Quali sono le librerie di dati utilizzabili per Swing?
- 13. Quali licenze sono le librerie di supporto Android rilasciate sotto?
- 14. Quali librerie iteratee/pipe ben sviluppate sono disponibili per Scala?
- 15. Ci sono dei problemi nell'usare Objectify con Google Cloud Endpoint su App Engine Java?
- 16. Impossibile utilizzare librerie esterne per Google App Engine progetto Java
- 17. Conversione di emoji Java in xml: quali librerie esistono?
- 18. Quali limiti ci sono sul numero di risorse Android?
- 19. librerie/framework di autenticazione utente php ... quali sono le opzioni?
- 20. Quali svantaggi ci sono per lasciare aperta una connessione SQL?
- 21. Quali librerie/librerie Java per algoritmi genetici?
- 22. Come analizzare xml in Python su Google App Engine
- 23. Quali sono i vantaggi di armv7 su armv6 durante la compilazione di app per iPhone?
- 24. Google App Engine librerie di importazione dalla cartella principale
- 25. Google App Engine: quali strumenti per modificare localmente il datastore?
- 26. Quali modifiche ci sono nel "Contratto di licenza del programma per gli sviluppatori di iPhone"
- 27. Quali librerie di boost sono solo di intestazione?
- 28. Quali alternative ci sono al client di test WCF?
- 29. cosa sono tutti i pacchetti/librerie Python in Google App Engine?
- 30. Pro App di Google App Engine per Django?
la JVM fornita da App Engine non è un'installazione standard di Java. Sai se sono disponibili su di esso? –
Ciao Sam - Non ho usato Google App Engine, ma una rapida scansione dei documenti suggerisce che è solo Java 6 con alcune limitazioni di sicurezza. Dai un'occhiata qui: http://code.google.com/appengine/docs/whatisgoogleappengine.html –
Xerces non è attualmente supportato da AppEngine. Problemi di sicurezza –