2009-01-08 38 views
1

我有一個java類,它將xslt應用於目錄中的所有xml文件,並對其找到的每個xml執行轉換並打印出完整文件名。如何輸出xml的名稱,文件類型和文件擴展名到另一個xml

我的問題是如何創建一個xml(Files.xml),它將具有以下格式,然後將文件名,文件類型和文件擴展名輸出到Files.xml?

<files> 
    <file> 
    <name> ThisFile </name> 
    <type> xml </type> 
    <extension> .xml </extension> 
    </file> 

    <file> 
    <name> AnotherFile </name> 
    <type> xml </type> 
    <extension> .xml </extension> 
    </file> 

    etc.... 
</files> 

再次感謝我的幫助!

回答

1

我會推薦使用像JAXBXStream這樣的序列化工具來直接序列化文件模型,但我在這裏給你留下一個小樣本,從頭開始構建文檔。

public void serializeXmlFiles(ArrayList<File> files) throws ParserConfigurationException, TransformerException { 
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder db = dbf.newDocumentBuilder(); 
    Document doc = db.newDocument(); 

    Element filesElement = doc.createElement("files"); 
    doc.appendChild(filesElement); 

    for (File file : files) { 
     Element fileElement = doc.createElement("file"); 
     Element nameElement = doc.createElement("name"); 
     nameElement.setTextContent(file.getName()); 
     Element typeElement = doc.createElement("type"); 
     typeElement.setTextContent("xml"); 
     Element extElement = doc.createElement("extension"); 
     extElement.setTextContent(".xml"); 

     fileElement.appendChild(nameElement); 
     fileElement.appendChild(typeElement); 
     fileElement.appendChild(extElement); 
     filesElement.appendChild(fileElement); 
    } 

    saveXMLDocument("files.xml", doc); 
} 

public boolean saveXMLDocument(String fileName, Document doc) throws TransformerException { 
    File xmlOutputFile = new File(fileName); 
    FileOutputStream fos; 
    Transformer transformer; 
    try { 
     fos = new FileOutputStream(xmlOutputFile); 
    } catch (FileNotFoundException e) { 
     return false; 
    } 
    TransformerFactory transformerFactory = TransformerFactory.newInstance(); 

    transformer = transformerFactory.newTransformer(); 

    DOMSource source = new DOMSource(doc); 
    StreamResult result = new StreamResult(fos); 

    transformer.transform(source, result); 
    return true; 
} 

希望它有幫助。

相關問題