以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 Java/Eclipse 』  (http://bbs.xml.org.cn/list.asp?boardid=41)
----  怎样用java程序从数据库生成.xml文件,着急啊  (http://bbs.xml.org.cn/dispbbs.asp?boardid=41&rootid=&id=7061)


--  作者:maguigongzi
--  发布时间:4/27/2004 2:59:00 PM

--  怎样用java程序从数据库生成.xml文件,着急啊
用java程序从数据库生成.xml文件


表结构如下

标题   id   父di
部门一   1    0
部门二   2    1
部门三   3    1
部门四   4    2
部门五   5    2
部门六   6    2
部门七   7    5
部门八   8    5

用java程序根据以上数据生成TreeNode.xml
---------

<?xml version="1.0" encoding="gb2312"?>
<Root>
 <TreeNode Title="部门一"  id="1" parentid="0">
  <TreeNode Title="部门二"  id="2" parentid="1">
   <TreeNode Title="部门四"  id="4" parentid="2"/>
   <TreeNode Title="部门五"  id="5" parentid="2">
    <TreeNode Title="部门七"  id="2" parentid="5"/>
    <TreeNode Title="部门八"  id="2" parentid="5"/>
   </TreeNode>
   <TreeNode Title="部门六"  id="2" parentid="2"/>
  </TreeNode>
  <TreeNode Title="部门三"  id="3" parentid="1"/>
 </TreeNode>
</Root>
------------------

maguigongzi@hotmail.com


--  作者:hlbh
--  发布时间:5/8/2004 10:49:00 PM

--  
多好的问题啊为什么没有人愿意回答呢?
我现在只是知道要用jdom或者dom4j,但是怎么实现还是不知道

--  作者:crowmuth
--  发布时间:5/9/2004 11:34:00 AM

--  
只用Java就可以了
--  作者:webmedia
--  发布时间:6/2/2004 7:51:00 PM

--  
www-900.ibm.com
--  作者:centipede
--  发布时间:6/24/2004 2:14:00 PM

--  
你的数据库是什么格式的?如果是sql server的话,就非常方便了。
--  作者:好运00
--  发布时间:7/16/2004 9:35:00 PM

--  
ResultSet rs=ps.executeQuery();
//获取结果集中的列名及其类型
ResultSetMetaData rsmd=rs.getMetaData();
int cc=rsmd.getColumnCount();
System.out.print("ColumnName ColumnType");
for(int i=1;i<=cc;i++){
        System.out.print(rsmd.getColumnClassName(i)+" "+rsmd.getColumnTypeName(i));
}

--  作者:jackry_love
--  发布时间:7/21/2004 1:00:00 PM

--  
以下是引用好运00在2004-7-16 21:35:30的发言:
ResultSet rs=ps.executeQuery();
//获取结果集中的列名及其类型
ResultSetMetaData rsmd=rs.getMetaData();
int cc=rsmd.getColumnCount();
System.out.print("ColumnName ColumnType");
for(int i=1;i<=cc;i++){
         System.out.print(rsmd.getColumnClassName(i)+" "+rsmd.getColumnTypeName(i));
}



我的设想是这样的:主要的数据库文件(.dbf,.xls,.mdb等格式)转化成xm文件,然后i作相应处理(子段长度,表结构等sql的所有操作)转化成要求格式的xml,再转化成要求的数据库文件。(xml也可作生成的目标文件)。

1.要求直接从数据库文件中读取数据记录,不通过数据库。
有哪位高手,知道相应格式的编程接口(急求.dbf的编程接口)?请指点。
2.把得到的xml文件转化成要求的格式的xml文件。(理论上,通过xml相关技术可以实现sql所有的基本操作),我想知道,有哪些xml技术可以实现xml——xml(这一过程实现类似sql的操作)。请比较各解决方案的优缺点?非常感谢!


--  作者:linp20
--  发布时间:8/5/2004 9:16:00 AM

--  
用jdom生成树,或简单的用sax
--  作者:shevchenkocb
--  发布时间:8/11/2004 10:36:00 AM

--  
同样关注这个问题.
还希望高手来指点指点
--  作者:mfc42d
--  发布时间:8/14/2004 9:47:00 AM

--  
不是很麻烦,直接out.print输出就可以的
--  作者:carniege
--  发布时间:8/16/2004 4:37:00 PM

--  
或者用对象影射也可以
--  作者:pearma
--  发布时间:9/25/2004 11:47:00 AM

--  
xml-xml你应该考虑用xslt来处理。可以完成过滤,汇总等sql的功能。
至于读取数据库文件,我建议你用odbc来做,可能会通用一些。
如果你一定要读原始格式,恐怕会浪费很多时间。
--  作者:老张家小瑞
--  发布时间:9/27/2004 2:32:00 PM

--  
package cn.com.throughout.ecm_view.xml_serializer;

/**
* @author zhang jiarui
**/

import java.io.*;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentType;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class DOMSerializer {

 private String indent;      // 缩进的标志
 private String lineSeparator;    // 换行的标志
 
 public DOMSerializer() {
  indent = " ";
  lineSeparator = "\n";
 }
 
 public void setLineSeparator(String lineSeparator) {
  this.lineSeparator = lineSeparator;
 }
 // 以下重组的方法,用到递归责任链模式
 public void serialize(Document doc, OutputStream out)
  throws IOException {
  
  Writer writer = new OutputStreamWriter(out);
  serialize(doc, writer);
 }
 
 public void serialize(Document doc, File file)
  throws IOException {
  
  Writer writer = new FileWriter(file);
  serialize(doc, writer);
 }
 
 public void serialize(Document doc, Writer writer)
  throws IOException {
   
  serializeNode(doc, writer, "");
  writer.flush();
 }
 
 public void serializeNode(Node node, Writer writer, String indentLevel)
  throws IOException {
   
  // 按节点类型确定操作
  switch(node.getNodeType()) {
   
   case Node.DOCUMENT_NODE:
    writer.write("<?xml version=\"1.0\" encoding=\"gb2312\" ?>");
    writer.write(lineSeparator);
    
    Document doc = (Document)node;
    serializeNode(doc.getDocumentElement(), writer, "");    //得到根节点
    break;
   
   case Node.ELEMENT_NODE:
    String name = node.getNodeName();
    writer.write(indentLevel + "<" + name);
    NamedNodeMap attributes = node.getAttributes();
    for(int i=0; i<attributes.getLength(); i++) {
     Node current = attributes.item(i);
     String value = current.getNodeValue().replaceAll("&","&amp;");
     writer.write(" " + current.getNodeName() +
      " = \"" + value + "\"");
     
    }
    writer.write(">");
    // 以下遍历所有子节点
    NodeList children = node.getChildNodes();
    if(children != null) {
     if(children.item(0) != null &&
      (children.item(0).getNodeType() == Node.ELEMENT_NODE)) {
       writer.write(lineSeparator);
     }
     for(int i=0; i<children.getLength(); i++) {
      serializeNode(children.item(i), writer, indentLevel + indent);
     }
     if((children.item(0) != null) &&
      (children.item(children.getLength()-1).getNodeType()==Node.ELEMENT_NODE)) {
       writer.write(lineSeparator);
     }
    }
    writer.write(indentLevel + "</" + name + ">");
    writer.write(lineSeparator);
    break;
    
   case Node.TEXT_NODE:
    String value = node.getNodeValue().replaceAll("&","&amp;");
    value = value.replaceAll("<","&lt;");
    value = value.replaceAll(">","&gt;");
    writer.write(value);
    break;
    
   case Node.CDATA_SECTION_NODE:
    writer.write("<![CDATA[" + node.getNodeValue() + "]]>");
    writer.write(lineSeparator);
    break;
    
   case Node.COMMENT_NODE:
    writer.write(indentLevel + "<!-- " + node.getNodeValue() + " -->");
    writer.write(lineSeparator);
    break;
    
   case Node.PROCESSING_INSTRUCTION_NODE:
    writer.write("<?" + node.getNodeName() +
       " " + node.getNodeValue() + "?>");
    writer.write(lineSeparator);
    break;
    
   case Node.DOCUMENT_TYPE_NODE:
    DocumentType docType = (DocumentType)node;
    writer.write("<!DOCTYPE " + docType.getName());
    if(docType.getPublicId() != null) {
     System.out.println(" PUBLIC \"" + docType.getPublicId() + "\" ");
    }
    else {
     writer.write(" SYSTEM ");
    }
    writer.write("\"" + docType.getSystemId() + "\">");
    writer.write(lineSeparator);
    break;
   
   case Node.ENTITY_REFERENCE_NODE:
    writer.write("&" + node.getNodeName() + ";");
    break;
  }
 }
}
生成XML的必要类写法


--  作者:老张家小瑞
--  发布时间:9/27/2004 2:34:00 PM

--  
输出XML文件的类:
import java.io.*;
import org.w3c.dom.Document;
import cn.com.throughout.ecm_view.xml_serializer.DOMSerializer;

import org.apache.xerces.parsers.DOMParser;
/**
* @author zhang jiarui
*
* 更改所生成类型注释的模板为
* 窗口 > 首选项 > Java > 代码生成 > 代码和注释
*/
public class Main_Serializer {
 
 public void HPSerializer(Document xmlDocument, String outputXMLFileName)
  throws Exception {
  
  File outputFile = new File(outputXMLFileName);
  DOMParser parser = new DOMParser();
  
  // 串行化代码
  DOMSerializer serializer = new DOMSerializer();
  serializer.serialize(xmlDocument, outputFile);
 }
}


--  作者:老张家小瑞
--  发布时间:9/27/2004 2:44:00 PM

--  
现在写DAO:可以用HashMap存取记录集中的数据.注意用到put()不能存KEY值重复,要用不一样的KEY,因为取出的是List.
之后:
在主类中生成document Object
Element title = document.createElement("标题");
List(ArrayList)list = xxDAO.getXxxxx();

for它
HashMap hp = (HashMap)list.get(i);
Text _title = document.createTextNode("title");
title.appendChild(_title);
生成了节点title.
以下的自己做吧


--  作者:fmdsaco
--  发布时间:5/9/2005 2:16:00 PM

--  
也正在找这方面的资料呀
--  作者:angie
--  发布时间:5/16/2005 11:13:00 PM

--  
这个用dom和sax都不是最好的选择。因为性能不好。建议用zenus试试
--  作者:jxufelw
--  发布时间:6/23/2005 4:10:00 PM

--  

楼主能不能给些注释
最好给个完整代码  jxufelw2004@sina.com
--  作者:菜籽
--  发布时间:6/25/2005 11:36:00 PM

--  
good
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
156.250ms