簡體   English   中英

試圖獲取整個XML文件。 [#document:null]錯誤

[英]Trying to get whole XML file. [#document: null] error

我正在嘗試獲取整個XMl(例如<HTML><BODY><item>a</item>...</HTML> )。 但是當我執行此代碼時,它在網頁上返回[#document: null]

我搜索了[#document: null] ,發現答案不是錯誤。 但是我看不到任何結果。

我想看到如下圖所示的結果。

如何查看是否成功進行?

我是Eclipse的新手。 很抱歉提出基本問題! 在此處輸入圖片說明

    package web.component;

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PrintWriter;
    import java.net.URL;
    import java.net.URLConnection;

    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;

    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;

    @WebServlet({ "/XmlSelectServlet", "/xmlselect" })
    public class XmlSelectServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //response.setContentType("");
         URL url = new URL("url");
            URLConnection connection = url.openConnection();    

            Document doc;
            try {
                doc = parseXML(connection.getInputStream());
                 response.setCharacterEncoding("UTF-8");
                    PrintWriter out = response.getWriter();
                    out.print(doc.toString());
                    out.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }   
    }
     private Document parseXML(InputStream stream) throws Exception{

            DocumentBuilderFactory objDocumentBuilderFactory = null;
            DocumentBuilder objDocumentBuilder = null;
            Document doc = null;

            try{

                objDocumentBuilderFactory = DocumentBuilderFactory.newInstance();
                objDocumentBuilder = objDocumentBuilderFactory.newDocumentBuilder();

                doc = objDocumentBuilder.parse(stream);

            }catch(Exception ex){
                throw ex;
            }       

            return doc;
        }    
}

這是因為doc.toString()返回帶有[]的字符串。 文檔上的toString()方法不會將其轉換回其XML格式。 要將Document轉換回其XML,您將需要執行以下操作的代碼:

public static void printDocument(Document doc, OutputStream out) throws IOException, TransformerException {
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer transformer = tf.newTransformer();
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
    transformer.setOutputProperty(OutputKeys.METHOD, "xml");
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

    transformer.transform(new DOMSource(doc), 
         new StreamResult(new OutputStreamWriter(out, "UTF-8")));
}

然后調用它以輸出您的文檔:

try {
    doc = parseXML(connection.getInputStream());
    response.setCharacterEncoding("UTF-8");

    // OLD CODE
    // PrintWriter out = response.getWriter();
    // out.print(doc.toString());
    // out.close();

    // NEW CODE
    printDocument(doc, response.getOutputStream());
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM