由于没有xml的DTD需要分析xml的结构
不知道使用jdom怎么样得到xml的结构树了
不知道各位GGJJ有没有示例程序能借鉴一下,小弟感激不尽

解决方案 »

  1.   

    package com.icbridge.mx.util;import java.io.*;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.output.XMLOutputter;
    import org.apache.log4j.Logger;
    import com.icbridge.mx.dbc.OracleDBC;public class XmlWriter {

    private static Logger logger = Logger.getLogger(XmlWriter.class);

    public XmlWriter(){

    }
    /**
     * 
     * @Author: Gary.M
     * @Date: 2007-04-11 上午09:44:24
     * @param sql
     * @param parentElement 父级Element名
     * @param childElement 子Element名
     * @param fileName 最终生成的(xml)文件名(包括路径)如:"d:\\data.xml"
     * @return
     */
    public boolean isCreate(String sql,String parentElement,String childElement,String fileName){

    boolean isDone = true;
    OracleDBC dbc = null;
    Connection con = null;
    ResultSet rs = null;
    PreparedStatement pstmt = null;
    ResultSetMetaData rsmd = null;
    int numberOfColumns = 0;
    Document document=new Document(new Element(parentElement));//创建文档

    try
    {
    dbc = new OracleDBC();
    con = dbc.getConnection();
    pstmt = con.prepareStatement(sql);
    rs = pstmt.executeQuery();
    rsmd = rs.getMetaData();  //获取字段名
    numberOfColumns = rsmd.getColumnCount(); //获取字段数

    if(rs == null)
    {
    logger.info("无法取得记录集!");
    isDone = false;
    }
    else
    {
     int i=0;
     while(rs.next())//将查询结果取出
     {
     Element element0=new Element(childElement);  //创建元素 生成JDOM树
     document.getRootElement().addContent(element0);
     for(i=1; i<=numberOfColumns;i++)
     {
     String date = rs.getString(i);
     //new String(rs.getString(i).getBytes("ISO-8859-1"),"gb2312"); //代码转换
     Element element = new Element(rsmd.getColumnName(i)).setText(date);
     element0.addContent(element);
     }
     }
    }
    rs.close();
    pstmt.close();

    }catch(Exception e)
    {
    logger.error("数据库操作失败!"+e);
    }
    finally
    {
    dbc.close();
    }
    XMLOutputter outp = new XMLOutputter();  try
    {
    outp.output(document, new FileOutputStream(fileName)); //输出XML文档
    }
    catch(IOException e)
    {
    logger.error("XML 文档生成失败!"+e);
    }
    logger.info("XML 文档生成完毕!");

    return isDone;
    }

    }
      

  2.   

    dtd只是规范xml文档,dom在没有dtd的时候照样可以按照他自己的方式解析文档
      

  3.   


    package run;
    import org.jdom.*;
    import org.jdom.input.*;
    import java.io.*;
    import java.util.*;;
    public class jdomTest {
     public void jdomtest() {
        String textXml = null;
        textXml = "<note width="+"\"100%\""+">";
        textXml = textXml +
            "<to><to1>a111</to1><to2>a222</to2><to3>a333</to3></to><from>bbb</from><heading>ccc</heading><body>ddd</body>";
        textXml = textXml + "</note>";
        System.out.println(textXml);
        SAXBuilder builder = new SAXBuilder();
        Document doc = null;
        Reader in= new StringReader(textXml);
        try {
          doc = builder.build(in);
          
          Element root = doc.getRootElement();
          System.out.println(root.getAttributeValue("width"));
          List ls = root.getChildren();//注意此处取出的是root节点下面的一层的Element集合
          for (Iterator iter = ls.iterator(); iter.hasNext(); ) {
             Element el = (Element) iter.next();
             if(el.getName().equalsIgnoreCase("to")){
              List ls2 = el.getChildren();
              for(Iterator iter2 = ls2.iterator(); iter2.hasNext();){           
              Element e2 = (Element)iter2.next();
              if(e2.getTextTrim().equals("to1")){
              e2.setText("I have bean changed in this element.");
              System.out.println(e2.getName());
              continue;
              }
              System.out.println(e2.getName());
              }
              continue;
             }
             System.out.println(el.getText());
            
          }
        }
        catch (IOException ex) {
          ex.printStackTrace();
        }
        catch (JDOMException ex) {
          ex.printStackTrace();
        }
      }}
      

  4.   


    package run;
    import org.jdom.*;
    import org.jdom.output.*;
    import java.io.*;
    public class WriteXML{
        public void BuildXML() throws Exception {
            Element root,student,number,name,age,firstname,lastname;         
            root = new Element("student-info"); //生成根元素:student-info
            student = new Element("student"); //生成元素:student(number,name,age)                             
            number = new Element("number");
            name = new Element("name");
            age = new Element("age");
            firstname = new Element("firstname");
            lastname = new Element("lastname");
            Document doc = new Document(root); //将根元素植入文档doc中
            root.setText("root_name");
            number.setText("001");
            firstname.setText("yu");
            lastname.setText("haiming");
            age.setText("24");
            student.addContent(number);
            student.addContent(name);
            student.addContent(age);
            name.addContent(firstname);
            name.addContent(lastname);
            root.addContent(student);
            
            root.setAttribute("width", "100%");
            root.setAttribute("height", "860px");
            root.setAttribute("bgcolor", "red");
            root.setAttribute("name", "student");
            Format format = Format.getCompactFormat();
            format.setEncoding("gb2312"); //设置xml文件的字符为gb2312
            format.setIndent("    "); //设置xml文件的缩进为4个空格
            XMLOutputter XMLOut = new XMLOutputter(format);//元素后换行一层元素缩四格 
            XMLOut.output(doc, new FileOutputStream("studentinfo.xml"));  
    }
        public static void main(String[] args) throws Exception {
            WriteXML w = new WriteXML();
            System.out.println("Now we build an XML document .....");
            w.BuildXML();
            System.out.println("finished!");
    }
    }