2012-09-07 50 views
1

我有一個文件夾中的stockA.txt形式的一些股票價格文件 我想創建一個Java程序,存儲文件名時沒有在xml文件中的擴展名作爲節點。 例如,file.xml應該是形式:如何基於股票文件名創建一個xml文件

<stockA></stockA> 
<stockB></stockB> 

的問題是,我收到以下錯誤代碼: 異常線程「main」 org.w3c.dom.DOMException中:HIERARCHY_REQUEST_ERR:一個嘗試在不允許的地方插入節點。

下面是代碼

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package xmlfilecreation; 

import java.io.File; 
import java.util.ArrayList; 
import java.util.List; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerException; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 

/** 
* 
* @author Administrator 
*/ 
public class XMLFileCreation { 



    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     // TODO code application logic here 
     File folder = new File("/Users/Administrator/Documents/TM470/NYSE_EOD/NyseLast2Years/"); 
     File[] listOfFiles = folder.listFiles(); 

     List<String> results = new ArrayList<String>(); 
     for (int i = 0; i < listOfFiles.length; i++) 
     { 
      results.add(listOfFiles[i].getName().replace(".txt", "")); 
      //System.out.println(results.get(i)); 
     } 

     try 
     { 
      DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 

      //elements 
      Document doc = docBuilder.newDocument(); 

      //root element 
      Element rootElement = doc.createElement("Stocks"); 
      doc.appendChild(rootElement); 

      int counter = 0; 

      Element myElement; 
      for (String item: results) 
      { 
       myElement = doc.createElement(item); 
       doc.appendChild(myElement); 
       rootElement.appendChild(myElement); 
       counter++; 
      } 

      System.out.println(counter); 

      //write the content into xml file 
      TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
      Transformer transformer = transformerFactory.newTransformer(); 
      DOMSource source = new DOMSource(doc); 
      StreamResult result = new StreamResult(new File("file.xml")); 

      transformer.transform(source, result); 

      System.out.println("File saved!"); 
     } 
     catch (ParserConfigurationException ex) 
     { 
      ex.printStackTrace(); 
     } 
     catch(TransformerException ex) 
     { 
      ex.printStackTrace(); 
     } 
    } 
} 

如何解決這個錯誤? 謝謝。

回答

2

您正在追加兩次元素,一次在根級別,另一次在Stocks標記中。你只需要做一次。

for (String item: results) { 
    Element myElement = doc.createElement(item); 
    // doc.appendChild(myElement); -> You don't need this one 
    rootElement.appendChild(myElement); 
    counter++; 
} 

追加到根元素就足夠了。

+0

非常感謝。我沒有注意到! – skiabox

+0

是否有可能擺脫根元素? – skiabox

+1

您只需要一個根元素。 – Alex

相關問題