12-002-2 XML文件的建立或者xml文件的本地输出(保存)

来源:互联网 发布:知乎 唯一视觉怎么样 编辑:程序博客网 时间:2024/05/01 12:16

图文版:http://note.youdao.com/yws/public/redirect/share?id=0a3cb7361fd8684a62ecb7226c4096ab&type=false

资源文件下载:https://yunpan.cn/OcRU7u3ftuURJy  访问密码 1b25


2.1 上面实现了xml文件的DOM解析,即xml文件数据的读取,同样DOM也能实现XML文件的生成或输出

    首先需要找到一个工厂类:

javax.xml.transform.TransformerFactory  //转换输出工厂类

public static TransformerFactory newInstance() //取得上面的工厂类
                                      throws TransformerFactoryConfigurationError

public abstract Transformer newTransformer() //取得转换类
                                    throws TransformerConfigurationException

   然后找到转换类:

javax.xml.transform.Transformer
 
public abstract void setOutputProperties(Properties oformat) //设置程序输出文件的格式(比如编码问题)
public abstract void t
                        throws TransformerException

    上面transform(Source xmlSource, Result outputTarget) 中有一个source输出源和输出目的地Result

public interface javax.xml.transform.Source
  --javax.xml.transform.dom.DOMSource //Source的子类
     -- DOMSource(Node n) //而xml的文档类型Document正是Node的子接口
public interface javax.xml.transform.Result
public class javax.xml.transform.stream.StreamResult //是以流的形式输出的为Result接口 的子类
   -- public void setOutputStream(OutputStream outputStream) 

2.2 现在定义一个工程来从程序中创建一个Document后保存到本地文件中同样以此文件为例

<contact>
 <member id="001">
    <name>小明</name>
    <age>28</age>
 </member>
 <member id="002">
    <name>小王</name>
    <age>28</age>
 </member>
</contact>


public class XMLWriter {
 public static void main(String[] args)throws Exception {
  //首先在程序中创建Document文档
  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder builder = factory.newDocumentBuilder() ;
  Document document = builder.newDocument() ;
 
  String ids[] = new String[]{"001","002"} ;
  String names[] = new String[]{"小明","小王"} ;
  String ages[] = new String[]{"28","26"} ;
 
  //创建第一代 根节点
  Element contactElement = document.createElement("contact") ;
  for(int x=0 ;x<ids.length;x++){
   //创建第二代 子节点
   Element memberElement = document.createElement("member") ;
   //定义属性“id”
   memberElement.setAttribute("id", ids[x]);
   //创建第三代子节点
   Element nameELement = document.createElement("name") ;
   Element ageElement = document.createElement("age") ;
   //创建第四代子节点 数据节点
   Text nameText = document.createTextNode(names[x]) ;
   Text ageText = document.createTextNode(ages[x]) ;
   //下面开始配置各个节点的父子关系
   nameELement.appendChild(nameText);
   ageElement.appendChild(ageText) ;
   memberElement.appendChild(nameELement) ;
   memberElement.appendChild(ageElement) ;
   contactElement.appendChild(memberElement) ;
  }
  //所有节点保存到document中,由于document,element都是node子类所以也可以
  //使用appendChild方法
  document.appendChild(contactElement) ;
 
  //删除一个指定属性的节点
  NodeList memberList = document.getElementsByTagName("member") ;
  for(int x= 0 ;x<memberList.getLength();x++){
   Element memberElement = (Element)memberList.item(x) ; 
   if("002".equals(memberElement.getAttribute("id"))){
    System.out.println("deleted id = '002'") ;
    //通过当前节点找到父节点然后通过父节点再删除指定子节点
    memberElement.getParentNode().removeChild(memberElement) ;
   }
  }
  //通过上面的操作已经把所有的子节点数据以及关系保存到了内存中
  //并且形成了一棵树,下面就以文件的形式保存到本地中
  TransformerFactory transformFactory = TransformerFactory.newInstance() ;
  Transformer transformer = transformFactory.newTransformer() ;
  transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
  File file = new File("f:"+File.separator+"info.xml") ;
  Source source = new DOMSource(document) ;
  FileOutputStream out = new FileOutputStream(file) ;
  Result result = new StreamResult(out) ;
  transformer.transform(source, result);
 }
}



0 0