代码之家  ›  专栏  ›  技术社区  ›  Sam Hasler zpesk

谷歌AppEngine/Java Servlet中有哪些库用于处理XML

  •  6
  • Sam Hasler zpesk  · 技术社区  · 16 年前

    我在写一个JAVA servlet 在Eclipse中(托管在Google应用程序引擎上),需要处理一个XML文档。哪些库可以很容易地添加到Eclipse项目中并具有良好的示例代码?

    8 回复  |  直到 14 年前
        1
  •  5
  •   Sam Hasler zpesk    16 年前

    我最后用了 JAXP 使用SAX API。

    在我的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();
    
    ....
    
        2
  •  2
  •   Nick Holt    16 年前

    XECES(它同时提供SAX和DOM实现)和Xalan(它提供对转换的支持)——它们自1.5以来都与JDK捆绑在一起,因此已经配置在标准的Java安装中。

        3
  •  2
  •   Adam B    16 年前

    看你的目标是什么。我已经用过 JAXB 用于将XML编组/解聚到Java对象,并且它相当快,易于扩展,并具有良好的社区支持。

    如果你不想写模式什么的,那我就走运了 dom4j 它有一个较小的学习曲线。

        4
  •  2
  •   Gaurav    15 年前

    你可以使用 JDOM 这需要Xerces SaxParser。但是,AppEngine不提供Xerces库。您可以通过在项目的WEB-INF/LIB折叠中复制来添加它。

        5
  •  1
  •   nir    14 年前
    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;
        }
    
        6
  •  0
  •   tomjen    16 年前

    JDOM具有比标准Java XML API更好(更简单)的接口。

        7
  •  0
  •   cd1    16 年前

    您可以使用与非servlet环境中使用的库完全相同的库。

        8
  •  0
  •   Stobor    16 年前

    另一个选择是,它比Xerces(上次我比较它们时)更快 Saxon .