2011-06-16 47 views
0

我需要拆分一個XML文件,工作,但我發現我不需要的部分和。 我把它分成了1000個文件,所以我可以改變我已經有的代碼,或者添加新的方法,並把文件放在目錄中,讓它刪除行。刪除xml版本控制+開始節點

這裏是一個xml文件的簡單例子。

<?xml version="1.0" encoding="UTF-8"?><root> 
<envelope> 
    <node> 
    <node> 
    </node> 
    </node> 
<envelope> 
<envelope> 
    <node> 
    <node> 
    </node> 
    </node> 
<envelope> 

</root> 

而這裏是我現在的代碼分裂xml的代碼。

public class JavaSplit { 

public static void main(String[] args) throws Exception { 

    String path = "C:\\XMLFiles\\"; 
    String nameXML = "CSV_SAMPLE_DATA.xml"; 
    String file1 = path + nameXML; 
    String rootName = "root"; 
    String childName = "envelope"; 
    String attribute = "fileID"; 


    JavaSplit.splitXMLFile(file1, path,rootName, childName, attribute); 
} 

public static void splitXMLFile (String file, String path, String rootName, String childName, String attribute) throws Exception {   
    String[] temp; 
    String[] temp2; 
    String[] temp3; 
    String[] temp4; 
    String[] temp5; 
    String[] temp6; 

    File input = new File(file);   
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();   
    Document doc = dbf.newDocumentBuilder().parse(input); 
    XPath xpath = XPathFactory.newInstance().newXPath();   
    NodeList nodes = (NodeList) xpath.evaluate("//"+rootName+"/"+childName, doc, XPathConstants.NODESET);   

    Node staff = doc.getElementsByTagName(childName).item(0); 
    NamedNodeMap attr = staff.getAttributes(); 
    Node nodeAttr = attr.getNamedItem(attribute); 
    String node = nodeAttr.toString(); 
    temp = node.split("="); 
    temp2 = temp[1].split("^\""); 
    temp3 = temp2[1].split("\\."); 

    Document currentDoc = dbf.newDocumentBuilder().newDocument(); 
    Node rootNode = currentDoc.createElement(rootName); 
    File currentFile = new File(path + temp3[0]+ ".xml"); 


    for (int i=1; i <= nodes.getLength(); i++) {    
     Node imported = currentDoc.importNode(nodes.item(i-1), true);    
     rootNode.appendChild(imported); 

     Node staff2 = doc.getElementsByTagName(childName).item(i); 
     if (staff2 == null){ 

     } 
     else{ 
     NamedNodeMap attr2 = staff2.getAttributes(); 
     Node nodeAttr2 = attr2.getNamedItem(attribute); 
     String node2 = nodeAttr2.toString(); 
     temp4 = node2.split("="); 
     temp5 = temp4[1].split("^\""); 
     temp6 = temp5[1].split("\\."); 

      writeToFile(rootNode, currentFile);     
      rootNode = currentDoc.createElement(rootName);  
      currentFile = new File(path + temp6[0]+".xml"); 
     } 

    } 

    writeToFile(rootNode, currentFile);  
} 

private static void writeToFile(Node node, File file) throws Exception {   
    Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
    transformer.transform(new DOMSource(node), new StreamResult(new FileWriter(file)));  
} 

}

+0

你是什麼意思你把它分成1000個文件? – MirroredFate 2011-06-16 15:00:56

+0

這就好像它聽起來有消息 – Eve 2011-06-17 06:34:45

回答

1

你只是想從您的所有文件刪除?對於這樣的一次性編輯,您可以使用Notepad ++等程序來檢查目錄中的所有文件,併爲該行執行查找/替換。只要確保對這些文件進行備份,因爲我不建議刪除該行,因爲xml解析器應該使用該信息而不是將其解析爲數據。

+0

中有1000個「信封」節點好,我不知道Notepad ++做到了這一點,我不需要該行,因爲要讀取該文件的應用程序將添加它自己的文件頭和頁腳 – Eve 2011-06-17 06:33:16