Какие есть библиотеки для обработки XML в Google App Engine / Java Servlet - PullRequest
6 голосов
/ 23 июня 2009

Я пишу сервлет Java в Eclipse (для размещения в Google App Engine) и мне нужно обработать документ XML. Какие библиотеки доступны для добавления в проект Eclipse и имеют хороший пример кода?

Ответы [ 8 ]

5 голосов
/ 23 июня 2009

Я использовал JAXP с SAX API.

Добавление в мой сервлет что-то вроде следующего:

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();

....
2 голосов
/ 18 сентября 2009

Вы можете использовать JDOM , для которого требуется xerces SAXParser. Однако AppEngine не предоставляет библиотеку xerces. Вы можете добавить его, скопировав его в папку WEB-INF / lib вашего проекта.

2 голосов
/ 23 июня 2009

Зависит, каковы ваши цели, я полагаю. Я использовал JAXB для маршалинга / демаршаллинга xml для объектов Java, и он довольно быстрый, легко расширяемый и имеет хорошую поддержку сообщества.

Если вы не хотите писать схемы, а что нет, то мне повезло с dom4j , и у него меньшая кривая обучения.

2 голосов
/ 23 июня 2009

Xerces (который обеспечивает реализации SAX и DOM) и Xalan (который обеспечивает поддержку преобразований) - оба были связаны с JDK с 1.5 и поэтому уже настроены в стандартной установке Java

1 голос
/ 14 февраля 2011
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;
    }
0 голосов
/ 23 июня 2009

Другой выбор, который имеет лучшую скорость, чем Xerces (последний раз я их сравнивал), был Saxon .

0 голосов
/ 23 июня 2009

вы можете использовать те же библиотеки, что и в среде без сервлетов.

0 голосов
/ 23 июня 2009

JDom имеет лучший (более простой) интерфейс, чем стандартные API Java XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...