2016-12-09 2 views
0

У меня есть код, который проходит по всему XML-контенту.Сохранить контент из XML в CSV-файл

Теперь у меня есть открытый поток писателя на beginig, но я не знаю, как добавить к методу:

bw.write

ReadXML.java

public class ReadXML { 

    public static void main(String[] args) { 

    try { 

    File file = new File("C:\\test.xml"); 
    File outputFile = new File("C:\\test.csv"); 

    DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
    Document doc = dBuilder.parse(file); 
    BufferedWriter bw = null; 
    FileWriter fw = null; 

    System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 

    if (doc.hasChildNodes()) { 
     printNote(doc.getChildNodes()); 
    } 
    } catch (Exception e) { 
    System.out.println(e.getMessage()); 
    } 
    } 

    private static void printNote(NodeList nodeList) { 

    for (int count = 0; count < nodeList.getLength(); count++) { 

    Node tempNode = nodeList.item(count); 

    if (tempNode.getNodeType() == Node.ELEMENT_NODE) { 

     System.out.println("\nNode Name =" + tempNode.getNodeName() + " [OPEN]"); 
     System.out.println("Node Value =" + tempNode.getTextContent()); 

     if (tempNode.hasAttributes()) { 

      // get attributes names and values 
      NamedNodeMap nodeMap = tempNode.getAttributes(); 

      for (int i = 0; i < nodeMap.getLength(); i++) { 
       Node node = nodeMap.item(i); 
       System.out.println("attr name : " + node.getNodeName()); 
       System.out.println("attr value : " + node.getNodeValue()); 
      } 
     } 
     if (tempNode.hasChildNodes()) { 
      // loop again if has child nodes 
      printNote(tempNode.getChildNodes()); 
     } 
     System.out.println("Node Name =" + tempNode.getNodeName() + " [CLOSE]"); 
    } } }} 

не могли бы вы мне помочь? если вы знаете, как решить проблему, это будет здорово.

спасибо!

+0

Что вы подразумеваете под "add to the method"? Какие данные вы хотите записать в свой CSV-файл? И, кстати, ваш писатель не открыт, он пуст. – Quagaar

+0

на данный момент я хочу сохранить все данные, поэтому tempNode.getTextContent()) ;, должен быть добавлен в bw – 4est

ответ

1

Хорошо, все еще не уверен, что именно ваша проблема, но, возможно, это помогает.

Во-первых, открыть писатель:

final BufferedWriter w = new BufferedWriter(new FileWriter(outputFile)); 

Затем передать его printNote:

printNote(doc.getChildNodes(), w); 

Измените метод соответственно:

private static void printNote(final NodeList nodeList, final BufferedWriter w) throws IOException { 
    // ... 
} 

Если у вас есть узел, который вы хотите напишите в файле:

w.write(node.getTextContent()); 
w.newLine(); 

Не забудьте закрыть своего писателя после того, как все будет готово!

Редактировать

Примеры закрытия писателя:

  1. Старая школа

    public static void mainv1(String[] args) { 
    
        File file = new File("C:\\test.xml"); 
        File outputFile = new File("C:\\test.csv"); 
    
        BufferedWriter bw = null; 
    
        try { 
         DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
         Document doc = dBuilder.parse(file); 
    
         System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 
    
         // Open in try because FileWriter constructor throws IOException 
         bw = new BufferedWriter(new FileWriter(outputFile)); 
    
         if (doc.hasChildNodes()) { 
          printNote(doc.getChildNodes(), bw); 
         } 
        } catch (Exception e) { 
         System.out.println(e.getMessage()); 
        } finally { 
         // Check for null because bw won't be initialized if document parsing failed 
         if (bw != null) { 
          try { 
           bw.close(); 
          } catch (final IOException e) { 
           // Log error 
          } 
         } 
        } 
    } 
    
  2. Java7 и выше

    public static void main(String[] args) { 
    
        File file = new File("C:\\test.xml"); 
        File outputFile = new File("C:\\test.csv"); 
    
        // Since Java7 you can use try-with-resources 
        // The finally block closing the writer will be created automatically 
        try (BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile))) { 
    
         DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
         Document doc = dBuilder.parse(file); 
    
         System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 
    
         if (doc.hasChildNodes()) { 
          printNote(doc.getChildNodes(), bw); 
         } 
        } catch (Exception e) { 
         System.out.println(e.getMessage()); 
        } 
    } 
    
+0

спасибо! закрыть должен быть основным методом? – 4est