200 分在哪,that's too easy

解决方案 »

  1.   

    用jsp或servlet(java语言),结贴时再加100分,一旦可以马上结贴,决不失言,我是新手最好具体一点。
       谢谢!
      

  2.   

    200 分在哪,that's too easy
      

  3.   

    import com.rainbow.finance.util.CommonProperties;
    import javax.xml.parsers.*;
    import org.w3c.dom.*;            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder=factory.newDocumentBuilder();
                Document doc=builder.parse("table.xml");
                doc.normalize();            NodeList cols =doc.getElementsByTagName("col");
                Element colel;
                //get name
                doc.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
                //get descript
               doc.getElementsByTagName("descript").item(0).getFirstChild().getNodeValue();            //get col
                for (int i=0;i<cols.getLength();i++){
                   colel=(Element)cols.item(i);
                 //get name type descript
                   colel.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
                }
      

  4.   

    你可以看看:books.xml --待处理的xml文件<?xml version="1.0" encoding="UTF-8"?>
    <catalog>
    <book id="bk101">
    <author>Gambardella, Matthew</author>
    <title>XML Developer's Guide</title>
    <publish_date>
      <year>2000</year>
      <month>10</month>
      <day>1</day>
    </publish_date>
    <description>An in-depth look at creating applications with XML.</description>
    </book>
    <book id="bk102">
    <author>Ralls, Kim</author>
    <title>Midnight Rain</title>
    <publish_date>
      <year>2000</year>
      <month>12</month>
      <day>16</day>
    </publish_date>
    <description>A former architect battles corporate zombies.</description>
    </book>
    <book id="bk103">
    <author>Corets, Eva</author>
    <title>Maeve Ascendant</title>
    <publish_date>
      <year>2000</year>
      <month>11</month>
      <day>17</day>
    </publish_date>
    <description>After the collapse of a nanotechnology society in England.</description>
    </book>
    </catalog>使用DOM解析 --BookParser.javaimport javax.xml.parsers.*;
    import org.w3c.dom.*;
    import java.io.*;/**
     *使用DOM提取XML内容的例子
     */
    class BookParser{
    public static void main(String[] args){
    try{
    //获取一个XML解析器
    DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
    DocumentBuilder builder=factory.newDocumentBuilder();
    //解析XML文件
    Document document=builder.parse(new File("books.xml"));
    //去掉XML文档中空白部分
    document.normalize();
    //获取根节点并打印根节点的名称
    Element root=document.getDocumentElement();
    System.out.println("根原始的名称:"+root.getTagName());
    //获取所有的"book"标记,它是一个NodeList对象
    NodeList books=root.getElementsByTagName("book");
    //遍历NodeList
    System.out.println("书本列表");
    for(int i=0;i<books.getLength();i++){
    //获取books中的每一个元素
    Element book=(Element)books.item(i);
    //获取每个"book"标记的"id"属性
    String book_id=book.getAttribute("id");//或book.getAttributeNode("id").getValue();
    System.out.println("序号:"+book_id);
    //获取"book"标记下的每个元素
    System.out.print("作者:");
    System.out.println(book.getElementsByTagName("author").item(0).getFirstChild().getNodeValue());
    System.out.print("标题:");
    System.out.println(book.getElementsByTagName("title").item(0).getFirstChild().getNodeValue());
    //获取"publish_date"元素
    Element publishDate=(Element)book.getElementsByTagName("publish_date").item(0);
    //获取"publish_date"元素下的每个子元素
    String year=publishDate.getElementsByTagName("year").item(0).getFirstChild().getNodeValue();
    String month=publishDate.getElementsByTagName("month").item(0).getFirstChild().getNodeValue();
    String day=publishDate.getElementsByTagName("day").item(0).getFirstChild().getNodeValue();
    System.out.println("出版日期:"+year+"年"+month+"月"+day+"日");
    System.out.print("描述:");
    System.out.println(book.getElementsByTagName("description").item(0).getFirstChild().getNodeValue());
    System.out.println("--------------------");
    }
    }
    catch(Exception e2){}
    }
    }
      

  5.   

    还是用jdom吧,下载地址为:
    http://www.jdom.org/dist/binary/jdom-b8.zip
    这是目前最常用的xml解析包,解压后,把build/jdom.jar添入classpath即可
    压缩包里还有samples,可以参阅。以下是针对你的xml文件的解析例子:import java.io.*;
    import java.util.*;import org.jdom.*;
    import org.jdom.input.*;
    import org.jdom.output.*;
    import org.jdom.transform.*;public class TestXML extends Thread{
    public static void main(String []args){ try{
    SAXBuilder sb=new SAXBuilder();
    FileReader fr=new FileReader("F:\\on.xml");
                               //假设这on.xml是你的文件
    Document doc=sb.build(fr);
    fr.close();

    Element e=doc.getRootElement();
    System.out.println("Root Element:  "+e.getName());
    System.out.println("----------------------");
    e.getChild("name").setText("Hello World!");
    e.getChild("descript").setText("改动此处的文本");
    java.util.List list=e.getChild("cols").getChildren("col");

    for(int i=0;i<list.size();i++){
    Element col=(Element)list.get(i);
    System.out.println(col.getChild("descript").getText());
    }

    System.out.println("----------------------");

    XMLOutputter out=new XMLOutputter();
    out.output(doc,new java.io.OutputStreamWriter(System.out));
    /*此处的output(Document document,java.io.Writer writer);
     *你可以把writer定为任何一种输出,比如FileWriter,
     *可以把结果输出到一个文件中
     */

    }catch(Exception e){} }
    }
      

  6.   

    JDOM Makes XML Easy!!无论传统的DOM、SAX,都有缺点,DOM速度慢,SAX结构差,而且它们不是针对java开发的。
    与前两者比较jdom更让java程序员得心应手,因为它是针对java语言设计的,而且具用DOM与SAX两者的优点,速度快了许多:)
      

  7.   

    -------------------------------------------------------------------------------
    useinfo.xml
    -------------------------------------------------------------------------------
    <?xml version="1.0" encoding="GB2312"?>
    <!DOCTYPE table SYSTEM "useinfo.dtd">
    <table>
    <name>useinfo</name>
    <descript>用户信息表表的名字</descript>
    <cols>
    <col>
    <name>id</name>
    <type>number</type>
    <descript>用户编号</descript>
    </col>
    <col>
    <name>name</name>
    <type>varchar2(50)</type>
    <descript>姓名</descript>
    </col>
    <col>
    <name>password</name>
    <type>varchar2(50)</type>
    <descript>密码</descript>
    </col>
    </cols>
    </table>
    -------------------------------------------------------------------------------
    useinfo.dtd:
    -------------------------------------------------------------------------------
    <?xml version="1.0" encoding="GB2312" ?>
    <!ELEMENT col ( name, type, descript ) ><!ELEMENT name ( #PCDATA ) ><!ELEMENT type ( #PCDATA ) ><!ELEMENT table ( name, descript, cols ) ><!ELEMENT cols ( col+ ) ><!ELEMENT descript ( #PCDATA ) >
    -------------------------------------------------------------------------------
    useinfo.map:
    -------------------------------------------------------------------------------
    <?xml version='1.0' ?>
    <!DOCTYPE XMLToDBMS SYSTEM "xmldbms.dtd" ><XMLToDBMS Version="1.0">
       <Options>
       </Options>
       <Maps>
          <ClassMap>
             <ElementType Name="col"/>
             <ToClassTable>
                <Table Name="col"/>
             </ToClassTable>
             <PropertyMap>
                <ElementType Name="name"/>
                <ToColumn>
                   <Column Name="name"/>
                </ToColumn>
                <OrderColumn Name="nameOrder" Generate="Yes"/>
             </PropertyMap>
             <PropertyMap>
                <ElementType Name="type"/>
                <ToColumn>
                   <Column Name="type"/>
                </ToColumn>
                <OrderColumn Name="typeOrder" Generate="Yes"/>
             </PropertyMap>
             <PropertyMap>
                <ElementType Name="descript"/>
                <ToColumn>
                   <Column Name="descript"/>
                </ToColumn>
                <OrderColumn Name="descriptOrder" Generate="Yes"/>
             </PropertyMap>
          </ClassMap>
          <ClassMap>
             <ElementType Name="table"/>
             <ToRootTable>
                <Table Name="table"/>
                <CandidateKey Generate="Yes">
                   <Column Name="tablePK"/>
                </CandidateKey>
                <OrderColumn Name="tableOrder" Generate="Yes"/>
             </ToRootTable>
             <PropertyMap>
                <ElementType Name="name"/>
                <ToColumn>
                   <Column Name="name"/>
                </ToColumn>
                <OrderColumn Name="nameOrder" Generate="Yes"/>
             </PropertyMap>
             <PropertyMap>
                <ElementType Name="descript"/>
                <ToColumn>
                   <Column Name="descript"/>
                </ToColumn>
                <OrderColumn Name="descriptOrder" Generate="Yes"/>
             </PropertyMap>
             <RelatedClass KeyInParentTable="Candidate">
                <ElementType Name="cols"/>
                <CandidateKey Generate="Yes">
                   <Column Name="tablePK"/>
                </CandidateKey>
                <ForeignKey>
                   <Column Name="tableFK"/>
                </ForeignKey>
                <OrderColumn Name="colsOrder" Generate="Yes"/>
             </RelatedClass>
          </ClassMap>
          <ClassMap>
             <ElementType Name="cols"/>
             <ToClassTable>
                <Table Name="cols"/>
             </ToClassTable>
             <RelatedClass KeyInParentTable="Candidate">
                <ElementType Name="col"/>
                <CandidateKey Generate="Yes">
                   <Column Name="colsPK"/>
                </CandidateKey>
                <ForeignKey>
                   <Column Name="colsFK"/>
                </ForeignKey>
                <OrderColumn Name="colOrder" Generate="Yes"/>
             </RelatedClass>
          </ClassMap>
       </Maps>
    </XMLToDBMS>
    -------------------------------------------------------------------------------
    useinfo.
    -------------------------------------------------------------------------------
    CREATE TABLE "col" ("colOrder" INTEGER, "typeOrder" INTEGER, "colsFK" INTEGER, "name" VARCHAR(255), "nameOrder" INTEGER, "descriptOrder" INTEGER, "type" VARCHAR(255), "descript" VARCHAR(255));
    CREATE TABLE "table" ("tablePK" INTEGER, "name" VARCHAR(255), "nameOrder" INTEGER, "descriptOrder" INTEGER, "tableOrder" INTEGER, "descript" VARCHAR(255));
    CREATE TABLE "cols" ("colsOrder" INTEGER, "colsPK" INTEGER, "tableFK" INTEGER);
    CREATE TABLE XMLDBMSKey (HighKey Integer);
    INSERT INTO XMLDBMSKey VALUES (0);
    -------------------------------------------------------------------------------
      

  8.   

    再由useinfo.dtd产生类代码就行了,搞定,嘿嘿
    接分!
      

  9.   

    您好
         muskteeeer(跳蚤):
        您这种方法较好,具体怎样执行呢,在什么环境下执行useinfo.map、useinfo.dtd,我是
        刚学这部分,希望得到您和大家的帮助,等您回音!
        具体一点,我的信箱是:[email protected]
        我是不是很笨很烦!!
      

  10.   

    如果你只是要得到这么一个Sql语句的话可以考虑用XSLT转换就好了。
      

  11.   

    knight_qmh(辉):
       您好,能否具体告诉我,我刚接触到xml,用XSLT怎样转换,再什么环境下执行,在???
    等您回答! 
       谢谢!
       如果可以揭贴,给大家加分!!
       谢谢!
       具体一点·!
      

  12.   

    大概就是这样我没有具体去编译。<?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:template match="/">
    CREATE TABLE &quot;<xsl:value-of select="//table/name"/>&quot; (
    <xsl:apply-templates select="//cols/col"/>
    );
    </xsl:template>
    <xsl:template match="cols/col">
    &quot;<xsl:value-of select="name"/> &quot; <xsl:value-of select="type"/>;
    </xsl:template>
    </xsl:stylesheet>
    StreamSource xmlSource = new StreamSource(new File("table.xml"));
    StreamSource xslSource = new StreamSource(new File("table.xsl"));
    //输出流
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    StreamResult outResult = new StreamResult(out);
    //转换
    TransformerFactory tFactory = TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer(xslSource);
    transformer.transform(xmlSource, outResult);
    System.out.println(out.toByteArray());
      

  13.   

    感谢knight_qmh(辉):
       您可否具体一点,我试了一下不幸,老是提示“StreamSource、TransformerFactory等类找不到”
      

  14.   

    建议你在网上找找讲解DOM、SAX的资料,大部分都提供了简单例子:)按knight_qmh的方法,你要导入一些类,如下:
    import javax.xml.transform.dom.*;
    import javax.xml.transform.stream.*;
    import javax.xml.transform.*;不过我是不喜欢用DOM,它的速度太慢,象上面那样的程序,运行一次大概要用1秒(是在1.7G处理器、384M内存下使用DOM2),在java环境里DOM不太实用,不能用于操作频繁的作业。还有就是同样的处理,在JDOM中更简单:
          Transformer transformer = TransformerFactory.newInstance()
            .newTransformer(new StreamSource(stylesheet));
              //stylesheet是xsl文件,比如:"F:\\myxslfile.xsl"
      
          JDOMResult out = new JDOMResult();
          transformer.transform(new JDOMSource(in), out);
          Document doc2 = out.getDocument();
          
          XMLOutputter out = new XMLOutputter("  ", true,"GB2312");
             //直接设置缩进、是否换行、语言种类,
          out.setOmitDeclaration(true);
             //是否添加xml文件头,就是<?xml version=1.0?>
          out.setTextNormalize(true);
          out.output(doc2, new java.io.OutputStreamWriter(System.out));JDOM还提供了一些去除文本中的空格之类的方法,都是由一个方法即直接完成。
      

  15.   

    muskteeeer(跳蚤)提到的方法,大概要用到Enhydra5.0之类的工具,它能把用“标记语言”写成的文档编译成java的类,但要先学会使用这种工具才成。
      

  16.   

    谢谢大家的帮助(knight_qmh(辉) 、peacock_king(孔雀王)等)
        我想不知大家能否给个具体的例子?!
        可以把xml文件生成一个sql语句。
        比如:creat table userinfo(id number(4), ........);
        再次谢谢大家的帮助和关注!
        等大家的回音!
      

  17.   

    您好
         muskteeeer(跳蚤):
        您这种方法较好,具体怎样执行呢,在什么环境下执行useinfo.map、useinfo.dtd,我是
        刚学这部分,希望得到您和大家的帮助,等您回音!
      

  18.   

    peacock_king(孔雀王)
       用你的代码:
        Transformer transformer = TransformerFactory.newInstance()
            .newTransformer(new StreamSource(stylesheet));
              //stylesheet是xsl文件,比如:"F:\\myxslfile.xsl"
      
          JDOMResult out = new JDOMResult();
          transformer.transform(new JDOMSource(in), out);
          Document doc2 = out.getDocument();
          
          XMLOutputter out = new XMLOutputter("  ", true,"GB2312");
             //直接设置缩进、是否换行、语言种类,
          out.setOmitDeclaration(true);
             //是否添加xml文件头,就是<?xml version=1.0?>
          out.setTextNormalize(true);
          out.output(doc2, new java.io.OutputStreamWriter(System.out));
      结果doc2不能输出任何东西?是怎么回事?
      我想知道你预计输出的是不是一个CREAT TABLE的SQL语句?
      

  19.   

    您好
         muskteeeer(跳蚤):
        您这种方法较好,具体怎样执行呢,在什么环境下执行useinfo.map、useinfo.dtd,我是
        刚学这部分,希望得到您和大家的帮助,等您回音!
      

  20.   

    您好
         muskteeeer(跳蚤):
        您这种方法较好,具体怎样执行呢,在什么环境下执行useinfo.map、useinfo.dtd,我是
        刚学这部分,希望得到您和大家的帮助,等您回音!
    我的邮箱[email protected]
      如果可以马上揭贴!
             谢谢各位的帮助!