如何将xml的名称,文件类型和文件扩展名输出到另一个xml

时间:2009-01-08 12:12:05

标签: java xml

我有一个java类,它将xslt应用于目录中的所有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 个答案:

答案 0 :(得分: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;
}

希望它有所帮助。