以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DOM/SAX/XPath 』  (http://bbs.xml.org.cn/list.asp?boardid=11)
----  [求助]把java中的XML文档树生成XML文档  (http://bbs.xml.org.cn/dispbbs.asp?boardid=11&rootid=&id=87980)


--  作者:linruixin
--  发布时间:11/28/2010 12:58:00 PM

--  [求助]把java中的XML文档树生成XML文档
import javax.xml.parsers.*;
import org.xml.sax.*;
import java.io.*;
import org.w3c.dom.*;

public class code10_4{
  static Document document;
  public static void main(String[] args) throws Exception{
    DocumentBuilderFactory  dbf=DocumentBuilderFactory.newInstance();
    DocumentBuilder db=dbf.newDocumentBuilder();
    //建立新的XML文件
    document=db.newDocument();
    //建立根元素
    Element root=(Element)document.createElement("customer");
    document.appendChild(root);
    //新增子元素customerID
    Element newnode=(Element)document.createElement("customerID");
    root.appendChild(newnode);
    //增加元素的内容
    newnode.appendChild(document.createTextNode("ID"));
    // 增加元素的属性
    newnode=(Element)root.getFirstChild();
    newnode.setAttribute("ID","c050013");
    //新增子元素username
    newnode=(Element)document.createElement("username");
    root.appendChild(newnode);
    //增加元素的内容
    newnode.appendChild(document.createTextNode("cheaperget"));
    //新增子元素password
    newnode=(Element)document.createElement("password");
    //新增元素插入在根元素的最后一个孩子前面
    root.insertBefore(newnode,root.getLastChild());
    //新建文字节点
    Node text=document.createTextNode("12345678");
    //插入文字节点到根节点第一个子节点的兄弟节点,即第二子节点
    Node temp=root.getFirstChild();
    temp.getNextSibling().appendChild(text);
    //显示XML文件
    System.out.println("根元素:"+root.getNodeName());
    //获取根元素的所有子节点
    NodeList childs=root.getChildNodes();
    for(int i=0;i<childs.getLength();i++)
    {
      //显示元素的名字和元素的内容(文字节点)
      System.out.print("元素:"+childs.item(i).getNodeName());
      System.out.println("/"+childs.item(i).getFirstChild().getNodeValue());
      //显示元素的的属性值
      if(childs.item(i).hasAttributes())
      {
        //取属性列表
        NamedNodeMap atts=childs.item(i).getAttributes();
        //使用for循环获取各属性名称和值
        for(int j=0;j<atts.getLength();j++)
        {
         Node att=atts.item(j);
         System.out.print("--"+att.getNodeName());
         System.out.println("/"+att.getNodeValue());
        }
     }   
   }
  }
DOMSource domsource=new DOMSource(document);
File file=new File(code10_4.xml);
StreamResult xmlresult=new StreamResult(file);
TransformerFactory factory=TransformerFactory.newInstance();
Transformer transformer=factory.newTransformer();
transformer.transform(domsource, xmlresult);
}    
这样写不对嘛?  
  


--  作者:sunbird_xwf
--  发布时间:12/2/2010 2:13:00 PM

--  
程序两个问题
1、添加包import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import javax.xml.transform.dom.*;
因为后面生成xml文档用到的类在这些包中
2、在main()方法中添加异常的处理
修改后的程序如下
import javax.xml.parsers.*;
import org.xml.sax.*;
import java.io.*;
import org.w3c.dom.*;
import javax.xml.transform.*;   //修改的部分
import javax.xml.transform.stream.*;
import javax.xml.transform.dom.*;
public class test{
  static Document document;
  public static void main(String[] args) throws Exception{
    DocumentBuilderFactory  dbf=DocumentBuilderFactory.newInstance();
    DocumentBuilder db=dbf.newDocumentBuilder();
    //建立新的XML文件
  document=db.newDocument();
    //建立根元素
    Element root=(Element)document.createElement("customer");
    document.appendChild(root);
    //新增子元素customerID
    Element newnode=(Element)document.createElement("customerID");
    root.appendChild(newnode);
    //增加元素的内容
    newnode.appendChild(document.createTextNode("ID"));
    // 增加元素的属性
    newnode=(Element)root.getFirstChild();
    newnode.setAttribute("ID","c050013");
    //新增子元素username
    newnode=(Element)document.createElement("username");
    root.appendChild(newnode);
    //增加元素的内容
    newnode.appendChild(document.createTextNode("cheaperget"));
    //新增子元素password
    newnode=(Element)document.createElement("password");
    //新增元素插入在根元素的最后一个孩子前面
    root.insertBefore(newnode,root.getLastChild());
    //新建文字节点
    Node text=document.createTextNode("12345678");
    //插入文字节点到根节点第一个子节点的兄弟节点,即第二子节点
    Node temp=root.getFirstChild();
    temp.getNextSibling().appendChild(text);
    //显示XML文件
    System.out.println("根元素:"+root.getNodeName());
    //获取根元素的所有子节点
    NodeList childs=root.getChildNodes();
    for(int i=0;i<childs.getLength();i++)
    {
      //显示元素的名字和元素的内容(文字节点)
      System.out.print("元素:"+childs.item(i).getNodeName());
      System.out.println("/"+childs.item(i).getFirstChild().getNodeValue());
      //显示元素的的属性值
      if(childs.item(i).hasAttributes())
      {
        //取属性列表
        NamedNodeMap atts=childs.item(i).getAttributes();
        //使用for循环获取各属性名称和值
        for(int j=0;j<atts.getLength();j++)
        {
         Node att=atts.item(j);
         System.out.print("--"+att.getNodeName());
         System.out.println("/"+att.getNodeValue());
        }
     }   
   }
try{         //修改的部分
     DOMSource domsource=new DOMSource(document);
     File file=new File("code10_4.xml");
     StreamResult xmlresult=new StreamResult(file);
     TransformerFactory factory=TransformerFactory.newInstance();
     Transformer transformer=factory.newTransformer();
     transformer.transform(domsource,xmlresult);
    }
   catch(Exception e)
     {
       System.out.println(e);
     }
    }
}
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
2,542.969ms