2012-08-10 30 views
-2

我想通過JSF Tomahawk上傳xml文件,然後解析它。上傳並解析JSF中的xml文件

我已經創建瞭如下的形式:

<!DOCTYPE html> 
<html lang="en" 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:t="http://myfaces.apache.org/tomahawk" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <h:head> 
     <title>Import</title> 
    </h:head> 
    <h:body> 
     <h1>Import</h1> 
     <h:form enctype="multipart/form-data"> 
      XML Datei mit den Kursdaten: 
      <t:inputFileUpload value="#{installationBean.uploadedFile}" /> 
      <h:commandButton value="submit" action="#{installationBean.submit}" /> 
      <h:messages /> 
     </h:form> 
    </h:body> 

這是豆:

包安裝;

import java.io.IOException; 
import javax.ejb.EJB; 
import javax.ejb.Stateless; 
import javax.ejb.LocalBean; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import javax.faces.context.FacesContext; 
import org.apache.commons.io.FilenameUtils; 
import org.apache.myfaces.custom.fileupload.UploadedFile; 


@Stateless 
@LocalBean 
@ManagedBean 
@ViewScoped 
public class InstallationBean { 

    private UploadedFile uploadedFile; 


    public UploadedFile getUploadedFile() { 
     return uploadedFile; 
    } 

    public void setUploadedFile(UploadedFile value) { 
     uploadedFile = value; 
    } 


    public void submit()throws IOException { 
     String fileName = FilenameUtils.getName(uploadedFile.getName()); 
     String contentType = uploadedFile.getContentType(); 
     byte[] bytes = uploadedFile.getBytes(); 

     // Parse xml 
    } 
} 

,我上傳的是一個XML文件的文件。 我該如何解析xml? 在我上面的代碼中,上傳文件後我得到了一個字節數組。 如何將其轉換爲xml文件並解析它?

回答

2

您可以使用以下命令將byte[]解析爲org.w3c.dom.Document

InputStream is = new ByteArrayInputStream(byteArray); 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    Document xml = builder.parse(is); 
+0

這個工作!謝謝。 – Alexander 2012-08-10 15:37:49

1

您不需要將其轉換爲XML文件。這是一個XML文件。要解析它,只需使用Java SE內置的JAXP API或Java EE內置的JAXB API。如果你真的想把它保存在磁盤上,只需使用FileOutputStream通常的方法。

此問題有什麼都沒有與JSF上傳文件有關。你成功地完成了這部分工作。例如,當您獲得byte[]FileInputStream時,您將會有恰好與相同的問題。