2009-10-14 74 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