新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论Java, J2SE, J2ME, J2EE, 以及Eclipse, NetBeans, JBuilder等Java开发环境,还有JSP, JavaServlet, JavaBean, EJB以及struts, hibernate, spring, webwork2, Java 3D, JOGL等相关技术。
    [返回] 计算机科学论坛计算机技术与应用『 Java/Eclipse 』 → 有没有人用过Castor的?(紧急求助) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 23315 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 有没有人用过Castor的?(紧急求助) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     凤舞九天 美女呀,离线,快来找我吧!
      
      
      等级:大一(猛啃高等数学)
      文章:14
      积分:148
      门派:XML.ORG.CN
      注册:2004/7/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给凤舞九天发送一个短消息 把凤舞九天加入好友 查看凤舞九天的个人资料 搜索凤舞九天在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看凤舞九天的博客楼主
    发贴心情 有没有人用过Castor的?(紧急求助)

      Mapping mapping = new Mapping();
      mapping.loadMapping("mapping.xml");

      Unmarshaller un = new Unmarshaller(Functree.class);
      un.setMapping(mapping);

    执行到第四句时出错如下:


    org.exolab.castor.mapping.MappingException: Could not find the class node
     at org.exolab.castor.mapping.loader.MappingLoader.createDescriptor(MappingLoader.java:396)
     at org.exolab.castor.xml.XMLMappingLoader.createDescriptor(XMLMappingLoader.java:202)
     at org.exolab.castor.mapping.loader.MappingLoader.loadMapping(MappingLoader.java:289)
     at org.exolab.castor.mapping.Mapping.getResolver(Mapping.java:291)
     at org.exolab.castor.mapping.Mapping.getResolver(Mapping.java:246)
     at org.exolab.castor.xml.Unmarshaller.setMapping(Unmarshaller.java:423)
     at com.victorysoft.wellinfo.ViewFunctree.main(ViewFunctree.java:94)


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/7/15 12:46:00
     
     凤舞九天 美女呀,离线,快来找我吧!
      
      
      等级:大一(猛啃高等数学)
      文章:14
      积分:148
      门派:XML.ORG.CN
      注册:2004/7/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给凤舞九天发送一个短消息 把凤舞九天加入好友 查看凤舞九天的个人资料 搜索凤舞九天在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看凤舞九天的博客2
    发贴心情 
    哭求,在线等
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/7/15 12:52:00
     
     mfc42d 帅哥哟,离线,有人找我吗?
      
      
      等级:大三暑假(ITELS考了6.5分!)(版主)
      文章:65
      积分:882
      门派:XML.ORG.CN
      注册:2004/6/13

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给mfc42d发送一个短消息 把mfc42d加入好友 查看mfc42d的个人资料 搜索mfc42d在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看mfc42d的博客3
    发贴心情 
    请你把详细的源码和xml文件贴出来
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/7/16 12:24:00
     
     凤舞九天 美女呀,离线,快来找我吧!
      
      
      等级:大一(猛啃高等数学)
      文章:14
      积分:148
      门派:XML.ORG.CN
      注册:2004/7/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给凤舞九天发送一个短消息 把凤舞九天加入好友 查看凤舞九天的个人资料 搜索凤舞九天在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看凤舞九天的博客4
    发贴心情 
    刚刚把这个问题搞定了:)
    直接贴找到的结论吧:

    How to get Address Books from XML file using mapping file
    2004-03-11 13:19:03  starlightpurple
    Hi,

    Is your Person class in a package? If so you will need to modify the mapping.xml file to include the package name before the class name. For example if you put the Person class in a package called MyPackage you would make the following changes to the mapping.xml file:


    * change <class name="Person"> to:
    <class name="MyPackage.Person">


    * change <field name="persons" type="Person" collection="collection" /> to:
    <field name="persons" type="MyPackage.Person" collection="collection" />


    Hope this helps.

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/7/26 14:46:00
     
     凤舞九天 美女呀,离线,快来找我吧!
      
      
      等级:大一(猛啃高等数学)
      文章:14
      积分:148
      门派:XML.ORG.CN
      注册:2004/7/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给凤舞九天发送一个短消息 把凤舞九天加入好友 查看凤舞九天的个人资料 搜索凤舞九天在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看凤舞九天的博客5
    发贴心情 
    源码如下:
    首先声明是转贴的哦:)


    Castor是一个java object的OR Mapping工具,可以将java objects保存于database、xml文件和LDAP数据库中(目前版本好像LDAP支持有问题)。下面简单介绍一下怎样用Castor来操纵XML文件

    1. 一 最简单的XML文件的操纵
    1. 1 读取XML文件
    有一个xml文件如下,表示了一个人的信息
    person.xml
    <?xml version="1.0"?>
    <person>
    <name>Bob Harris</name>
    <ssn>222-222-2222</ssn>
    <address>123 Foo Street</address>
    <work-phone>(123) 123-1234</work-phone>
    <home-phone>(123) 123-1234</home-phone>
    <email>bob@harris.org</email>
    </person>
    对应的java文件
    /*
    * Person.java
    *
    */

    /**
    *
    * @author yj
    */
    import java.io.*;

    public class Person {
    private String name;
    private String address;
    private String ssn;
    private String email;
    private String homePhone;
    private String workPhone;

    // -- allows us to create a Person via the constructor
    public Person(String name, String address, String ssn,
    String email, String homePhone, String workPhone) {
    this.name = name;
    this.address = address;
    this.ssn = ssn;
    this.email = email;
    this.homePhone = homePhone;
    this.workPhone = workPhone;
    }

    // -- used by the data-binding framework
    public Person() { }

    // -- accessors
    public String getName() { return name; }

    public String getAddress() { return address; }

    public String getSsn() { return ssn; }

    public String getEmail() { return email; }

    public String getHomePhone() { return homePhone; }

    public String getWorkPhone() { return workPhone; }

    // -- mutators
    public void setName(String name) { this.name = name; }

    public void setAddress(String address) {
    this.address = address;
    }

    public void setSsn(String ssn) { this.ssn = ssn; }

    public void setEmail(String email) { this.email = email; }

    public void setHomePhone(String homePhone) {
    this.homePhone = homePhone;
    }

    public void setWorkPhone(String workPhone) {
    this.workPhone = workPhone;
    }


    }

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/7/26 14:50:00
     
     凤舞九天 美女呀,离线,快来找我吧!
      
      
      等级:大一(猛啃高等数学)
      文章:14
      积分:148
      门派:XML.ORG.CN
      注册:2004/7/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给凤舞九天发送一个短消息 把凤舞九天加入好友 查看凤舞九天的个人资料 搜索凤舞九天在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看凤舞九天的博客6
    发贴心情 

    这是一个读取person.xml文件的例子
    /*
    * ReadPerson.java
    *
    * Created on 2001&Auml;ê12&Ocirc;&Acirc;25&Egrave;&Otilde;, &Iuml;&Acirc;&Icirc;&ccedil;3:32
    */

    /**
    *
    * @author yj
    */
    import org.exolab.castor.xml.*;
    import java.io.FileReader;

    public class ReadPerson {
    public static void main(String args[]) {
    try {
    Person person = (Person)
    Unmarshaller.unmarshal(Person.class,
    new FileReader("person.xml"));
    System.out.println("Person Attributes");
    System.out.println("-----------------");
    System.out.println("Name: " + person.getName() );
    System.out.println("Address: " + person.getAddress() );
    System.out.println("SSN: " + person.getSsn() );
    System.out.println("Email: " + person.getEmail() );
    System.out.println("Home Phone: " +
    person.getHomePhone() );
    System.out.println("Work Phone: " +
    person.getWorkPhone() );
    } catch (Exception e) {
    System.out.println( e );
    }
    }
    }


    传统上,如果需要操纵XML文件,需要用SAX或者DOM来处理,比较繁琐,有了Castor提供的marshalling and unmarshalling功能,就可以方便的在xml和java object之间方便的映射了。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/7/26 14:51:00
     
     凤舞九天 美女呀,离线,快来找我吧!
      
      
      等级:大一(猛啃高等数学)
      文章:14
      积分:148
      门派:XML.ORG.CN
      注册:2004/7/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给凤舞九天发送一个短消息 把凤舞九天加入好友 查看凤舞九天的个人资料 搜索凤舞九天在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看凤舞九天的博客7
    发贴心情 
    2. 2 生成XML文件
    下面是生成XML文件的例子:

    /*
    * CreatPerson.java
    *
    * Created on 2001年12月25日,下午5:06
    */

    /**
    *
    * @author yj
    */
    import org.exolab.castor.xml.*;
    import java.io.FileWriter;

    public class CreatePerson {
    public static void main(String args[]) {
    try {
    // -- create a person to work with
    Person person = new Person("Bob Harris",
    "123 Foo Street", "222-222-2222",
    "bob@harris.org", "(123) 123-1234",
    "(123) 123-1234");

    // -- marshal the person object out as a <person>
    FileWriter file = new FileWriter("bob_person.xml");
    Marshaller.marshal(person, file);
    file.close();
    } catch (Exception e) {
    System.out.println( e );
    }
    }
    }


    这是上面的CreatePerson生成的xml文件
    bob_person.xml
    <?xml version="1.0"?>
    <person><ssn>222-222-2222</ssn><address>123 Foo Street</address><work-phone>(123) 123-1234</work-phone><home-phone>(123) 123-1234</home-phone><email>bob@harris.org</email><name>Bob Harris</name></person>

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/7/26 14:52:00
     
     凤舞九天 美女呀,离线,快来找我吧!
      
      
      等级:大一(猛啃高等数学)
      文章:14
      积分:148
      门派:XML.ORG.CN
      注册:2004/7/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给凤舞九天发送一个短消息 把凤舞九天加入好友 查看凤舞九天的个人资料 搜索凤舞九天在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看凤舞九天的博客8
    发贴心情 
    3. 3 修改现有的XML文件
    修改现有的XML文件也很简单
    /*
    * ModifyPerson.java
    *
    * Created on 2001&Auml;ê12&Ocirc;&Acirc;25&Egrave;&Otilde;, &Iuml;&Acirc;&Icirc;&ccedil;5:12
    */

    /**
    *
    * @author yj
    */
    import org.exolab.castor.xml.*;
    import java.io.FileWriter;
    import java.io.FileReader;

    public class ModifyPerson {
    public static void main(String args[]) {
    try {
    // -- read in the person
    Person person = (Person)
    Unmarshaller.unmarshal(Person.class,
    new FileReader("person.xml"));
    // -- change the name
    person.setName("David Beckham");
    person.setEmail("David@beckham.com");

    // -- marshal the changed person back to disk
    FileWriter file = new FileWriter("person.xml");
    Marshaller.marshal(person, file);
    file.close();
    } catch (Exception e) {
    System.out.println( e );
    }
    }
    }

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/7/26 14:53:00
     
     凤舞九天 美女呀,离线,快来找我吧!
      
      
      等级:大一(猛啃高等数学)
      文章:14
      积分:148
      门派:XML.ORG.CN
      注册:2004/7/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给凤舞九天发送一个短消息 把凤舞九天加入好友 查看凤舞九天的个人资料 搜索凤舞九天在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看凤舞九天的博客9
    发贴心情 
    2. 二 复杂XML文件的操纵
    这个例子演示了如果操纵复杂的xml文件
    文件addressbook.xml如下
    <?xml version="1.0"?>
    <addressbook name="Manchester United Address Book">
    <person name="Roy Keane">
    <address>23 Whistlestop Ave</address>
    <ssn>111-222-3333</ssn>
    <email>roykeane@manutd.com</email>
    <home-phone>720.111.2222</home-phone>
    <work-phone>111.222.3333</work-phone>
    </person>
    <person name="Juan Sebastian Veron">
    <address>123 Foobar Lane</address>
    <ssn>222-333-444</ssn>
    <email>juanveron@manutd.com</email>
    <home-phone>720.111.2222</home-phone>
    <work-phone>111.222.3333</work-phone>
    </person>
    <person name ="Bob Harris">
    <ssn>222-222-2222</ssn>
    <address>123 Foo Street</address>
    <work-phone>(123) 123-1234</work-phone>
    <home-phone>(123) 123-1234</home-phone>
    <email>bob@harris.org</email>

    </person>
    </addressbook>

    可以看到,addressbook包含多条记录,每条记录是一个通讯录。为了对应复杂的xml文件,需要一个mapping.xml文件,来说明xml文件的项目和java object的对应关系

    <?xml version="1.0"?>
    <!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Object Mapping DTD Version 1.0//EN" "http://castor.exolab.org/mapping.dtd">

    <mapping>
    <description>A mapping file for our Address Book application</description>

    <class name="Person">
    <field name="name" type="string">
    <bind-xml name="name" node="attribute" />
    </field>
    <field name="address" type="string" />
    <field name="ssn" type="string" />
    <field name="email" type="string" />
    <field name="homePhone" type="string" />
    <field name="workPhone" type="string" />
    </class>

    <class name="Addressbook">
    <field name="name" type="string">
    <bind-xml name="name" node="attribute" />
    </field>
    <field name="persons" type="Person" collection="collection" />
    </class>

    </mapping>
    §这样,就可以一样很方便的使用Castor来操纵这个XML文件了
    同样,需要一个java文件来对应addressbook

    import java.util.List;
    import java.util.ArrayList;

    public class Addressbook {
    private String addressBookName;
    private List persons = new ArrayList();

    public Addressbook() { }

    // -- manipulate the List of Person objects
    public void addPerson(Person person) {
    persons.add(person);
    }

    public List getPersons() {
    return persons;
    }

    // -- manipulate the name of the address book
    public String getName() {
    return addressBookName;
    }

    public void setName(String name) {
    this.addressBookName = name;
    }
    }

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/7/26 14:53:00
     
     凤舞九天 美女呀,离线,快来找我吧!
      
      
      等级:大一(猛啃高等数学)
      文章:14
      积分:148
      门派:XML.ORG.CN
      注册:2004/7/8

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给凤舞九天发送一个短消息 把凤舞九天加入好友 查看凤舞九天的个人资料 搜索凤舞九天在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看凤舞九天的博客10
    发贴心情 
    察看addressbook的java 代码

    import org.exolab.castor.xml.*;
    import org.exolab.castor.mapping.*;

    import java.io.FileReader;
    import java.util.List;
    import java.util.Iterator;

    public class ViewAddressbook {
    public static void main(String args[]) {
    try {
    // -- Load a mapping file
    Mapping mapping = new Mapping();
    mapping.loadMapping("mapping.xml");

    Unmarshaller un = new Unmarshaller(Addressbook.class);
    un.setMapping( mapping );

    // -- Read in the Addressbook using the mapping
    FileReader in = new FileReader("addressbook.xml");
    Addressbook book = (Addressbook) un.unmarshal(in);
    in.close();

    // -- Display the addressbook
    System.out.println( book.getName() );

    List persons = book.getPersons();
    Iterator iter = persons.iterator();

    while ( iter.hasNext() ) {
    Person person = (Person) iter.next();

    System.out.println("\n" + person.getName() );
    System.out.println("-----------------------------");
    System.out.println("Address = "+ person.getAddress());
    System.out.println("SSN = " + person.getSsn() );
    System.out.println("Home Phone = " + person.getHomePhone() );
    System.out.println("email = " + person.getEmail() );
    }
    } catch (Exception e) {
    System.out.println( e );
    }
    }
    }

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/7/26 14:54:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Java/Eclipse 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/17 7:19:16

    本主题贴数14,分页: [1] [2]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    203.125ms