在JSF中上载和解析xml文件

时间:2012-08-10 13:17:39

标签: java xml jsf

我想通过JSF Tomahawk上传一个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 个答案:

答案 0 :(得分:2)

您可以使用以下内容将此byte[]解析为org.w3c.dom.Document

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

答案 1 :(得分:1)

您无需将其转换为XML文件。它已经是一个XML文件。要解析它,只需使用Java SE内置JAXP API或Java EE内置JAXB API。如果你真的想将它保存在磁盘上,只需按常规方式使用FileOutputStream

此问题与JSF上传文件有关。你成功地完成了那部分工作。例如,当您通过byte[]获得FileInputStream时,完全会出现同样的问题。