[英]Trying to get whole XML file. [#document: null] error
我正在嘗試獲取整個XMl(例如<HTML><BODY><item>a</item>...</HTML>
)。 但是當我執行此代碼時,它在網頁上返回[#document: null]
。
我搜索了[#document: null]
,發現答案不是錯誤。 但是我看不到任何結果。
我想看到如下圖所示的結果。
如何查看是否成功進行?
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.