2009-10-14 75 views
0

我有一個在Java中有2個字符串參數的方法,它將字符串寫入文件,現在我有dom文檔,它擁有我需要寫入文件但它不是字符串類型的值,如何可以我將它轉換成字符串這裏是我的代碼:dom doc到字符串

import java.io.*; 

import org.w3c.dom.*; 
import org.xml.sax.*; 
import javax.xml.parsers.*; 
import javax.xml.transform.*; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 

public class RemoveBlock { 

    public static boolean saveStringToFile(String fileName, String saveString) 
    { 
     boolean saved = false; 
     BufferedWriter bw = null; 

     try { 
      bw = new BufferedWriter(new FileWriter(fileName)); 

      try { 
       bw.write(saveString); 
       saved = true; 
      } 
      finally { 
       bw.close(); 
      } 
     } 
     catch(IOException ex) 
     { 
      ex.printStackTrace(); 
     } 
     return saved; 
    } 

    static public void main(String[] arg) { 
    try{ 
     String xmlFile = "Management.xml"; 
     File file = new File(xmlFile); 
     String remElement = "Physical_Order_List_Array"; 
     if (file.exists()){ 
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document doc = builder.parse(xmlFile); 
     TransformerFactory tFactory = TransformerFactory.newInstance(); 
     Transformer tFormer = tFactory.newTransformer(); 
     Element element = (Element)doc.getElementsByTagName(remElement).item(0); 
//  Remove the node 
     element.getParentNode().removeChild(element); 
//    Normalize the DOM tree to combine all adjacent nodes 
     doc.normalize(); 
     Source source = new DOMSource(doc); 
     Result dest = new StreamResult(System.out); 
     tFormer.transform(source, dest); 
     // System.out.println(); 
     // saveStringToFile("emir.xml", "dsds"); -> write method 
     } 
     else{ 
     System.out.println("File not found!"); 
     } 
    } 
    catch (Exception e){ 
     System.err.println(e); 
     System.exit(0); 
    } 
    } 
} 

回答

1

這裏是解決方案:

import java.io.*; 

import org.w3c.dom.*; 

import javax.xml.parsers.*; 
import javax.xml.transform.*; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 

public class RemoveBlock { 

    public static void removeAll(Node node, short nodeType, String name) { 
      if (node.getNodeType() == nodeType && 
        (name == null || node.getNodeName().equals(name))) { 
       node.getParentNode().removeChild(node); 
      } else { 

       NodeList list = node.getChildNodes(); 
       for (int i=0; i<list.getLength(); i++) { 
        removeAll(list.item(i), nodeType, name); 
       } 
      } 
     } 

    static public void main(String[] arg) { 
    try{ 
     String xmlFile = "Management.xml"; 
     File file = new File(xmlFile); 
     String remElement = "Physical_Order_List_Array"; 
     if (file.exists()){ 
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document doc = builder.parse(xmlFile); 
     TransformerFactory tFactory = TransformerFactory.newInstance(); 
     Transformer tFormer = tFactory.newTransformer(); 
     // Obtain a node 
     Element element = (Element)doc.getElementsByTagName(remElement).item(0); 


     element.getParentNode().removeChild(element); 


     removeAll(doc, Node.ELEMENT_NODE, remElement); 

     doc.normalize(); 
     Source source = new DOMSource(doc); 
     Result dest = new StreamResult(new FileOutputStream("Management.xml")); 
     tFormer.transform(source, dest); 
     } 
     else{ 
     System.out.println("File not found!"); 
     } 
    } 
    catch (Exception e){ 
     System.err.println(e); 
     System.exit(0); 
    } 
    } 
} 
1

爲什麼要將它轉換爲字符串?只是稍後將它寫入文件?爲什麼不能只做

Result dest = new StreamResult(new FileOutputStream("foo.xml")); 

如果你需要一個字符串:

StringWriter w = new StringWriter(); 
Result dest = new StreamResult(w); 
tFormer.transform(source, dest); 
String xmlString = w.toString(); 
+0

那麼有一個問題,當這條線是目前結果DEST =新StreamResult(System.out的);代碼是成功從XML文件中刪除Physical_Order_List_Array元素,但是當我嘗試將其輸出到文件時,無論字符串還是直接,xml文件保持不變。 – ant 2009-10-14 15:02:05

+0

我沒有這個問題的解決方案(沒有時間自己測試它)。但是,您可以嘗試使用另一個文件(或者先重命名舊文件),然後查看它是否有效。另外,這很可能是你想要做的事情,因爲在程序崩潰後你不想讓用戶留下部分文件。 (即確保你在更改舊的文件之前成功地編寫了你的​​文件) – sfussenegger 2009-10-14 15:15:13

+0

已經嘗試過了..它不起作用.. tnx我會盡力找出一些東西,儘管它不那麼容易.. – ant 2009-10-14 15:27:42