`
sing100star
  • 浏览: 28563 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

对象转化为Xml

阅读更多

     内部系统与外部系统对接时,需要进行数据交换,一般是采用XML格式。目前的OXM已基本满足要求,但是对于更加的复杂XMl数据,仍需要手工编写。

     由于是手工编写ORM,编写风格、方式因人而异。我也尝试写一个,同时和大家交流心得。

 

    代码说明:

    1、两个类Person和Address,一个Peson有多个Address

    2、使用Dom4j

    实现要求:

    1、可指定xml的文件名

    2、每个xml文件的person记录数不超过指定数量

 
/**
 * 地址
 */
public class Address {
    private String city;
    private String country;
    private String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getCountry() {
        return country;
    }
    public void setCountry(String country) {
        this.country = country;
    }
}
 
/**
 * 人
 */
public class Person {

    private String name;
    private int age;
    private int height;
    private List<Address> addresses = new ArrayList<Address>(3);

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getHeight() {
        return height;
    }
    public void setHeight(int height) {
        this.height = height;
    }
    public List<Address> getAddresses() {
        return addresses;
    }
     public void addAddress(Address address){
        addresses.add(address);
    }
}

 

 
public class XmlPerson {
    private Person person;
    public XmlPerson() {}
    public void setPerson(Person person){
        this.person =  person;
    }
    public Element toNameElement(){
        CDATA  c = DocumentHelper.createCDATA("name");
        c.setText(person.getName());
        Element e = DocumentHelper.createElement("name");
        e.add(c);
        return e;
    }
    public Element toHeightElement(){
        Element e =  DocumentHelper.createElement("height");
        e.setText(""+person.getHeight());
        return e;
    }
    public Element toAgeElement(){
        Element e = DocumentHelper.createElement("age");
        e.setText(""+person.getAge());
        return e;
    }
    private Element toAddressElement(Address address){
        Element addr = DocumentHelper.createElement("address");
        Element city = DocumentHelper.createElement("city");
        city.setText(address.getCity());
        Element country = DocumentHelper.createElement("country");
        country.setText(address.getCountry());
        addr.add(country);
        addr.add(city);
        return addr;
    }
     public Element toAddressesElements(){
        Element addressList = DocumentHelper.createElement("addressList");
        for(Address addr:person.getAddresses()){
            addressList.add(toAddressElement(addr));
        }
        return addressList;
    }
    public Element toPersonElement(){
        Element e = DocumentHelper.createElement("person");
        e.add(toNameElement());
        e.add(toHeightElement());
        e.add(toAgeElement());
        e.add(toAddressesElements());
        return e ;
    }
    public  static Element toPersonElement(List<Person> persons){
       XmlPerson xp =new XmlPerson();
       Element personList = DocumentHelper.createElement("persons");
       for(Person p:persons){
           xp.setPerson(p);
           personList.add(xp.toPersonElement());
       }
        return personList;
    }
    public static void writePersonToXmlFile(String fileName,List<Person> persons ) throws IOException {
        Document doc = DocumentHelper.createDocument();
        doc.add(XmlPerson.toPersonElement(persons));
        writeDocumentToXmlFile(fileName, doc);

    }
    public static void writeDocumentToXmlFile(String fileName,Document doc) throws IOException {
        File file = new File(fileName) ;
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");
        XMLWriter xr = new XMLWriter(new FileOutputStream(file),format);
        xr.write(doc);
        xr.flush();
    }
    public static void writePersonToXmlFile(String preName,List<Person> persons,int size) throws IOException {
        for(int i =  0 ; i< persons.size() ;i+=size){
            int start = i;
            int end = i+size;
            if(start > persons.size()){
                start = persons.size()-1;
                end = persons.size()  ;
            }
            if(end >persons.size()){
                end = persons.size() ;
            }
            String name = preName+start+"."+"xml";
            writePersonToXmlFile(name,persons.subList(start,end));
        }
    }
}

 

 
public class XmlPersonTest {
    Document doc;
    List<Person> ps ;
    @Before
    public void setUp(){
        ps = new ArrayList<Person>(100);
        for(int i = 0 ; i< 100; i++){
            Person p =new Person();
            p.setAge(i);
            p.setHeight(i);
            p.setName("ming"+i);
            Address  addr1 = new Address();
            addr1.setCity("jinjiang"+i);
            addr1.setCountry("china");
            Address  addr2 = new Address();
            addr2.setCity("shenzhen"+i);
            addr2.setCountry("china");
            p.addAddress(addr2);
            ps.add(p);
        }
        doc = DocumentHelper.createDocument();
    }
    @After
    public void tearDown(){
        ps= null;
        doc = null;
    }
    @Test
    public void testWriteXmlPerson() throws IOException {
      XmlPerson.writePersonToXmlFile("person",ps,13);
    }
}
 

 

    心得说明:

    1、使用组合的方式来处理Person。一方面不入侵person,另一方面转化逻辑集中

    2、在解析Xml的过程中,需要对属性进行归类,把同一种概念的属性,放到统一的方法里进行处理。

    3、使用测试开发,一小步一小步前进。

 

    其他:

    在数据格式转化过程中,关键是 建立一群相关对象,然后根据这些对象转化成其他格式。

    比如在网址支付结果的处理过程,一方面需要把支付数据传到页面,另一方面以Xml格式传给财务系统。我的解决思路是建立一个Payment类,然后把所需的信息整合到payment中。如果要传递到页面,生成方法CreatePaymentVO,如果要传给财务,构造XMLPaymnt类。虽然类有点多,但是可维护性强。

 

 

分享到:
评论

相关推荐

    jaxb xml转化为对象,对象转化为xml,xml转化为xsd,表转化为对象

    接着,“对象转化为XML”。当我们需要将Java对象的数据以XML格式输出时,JAXB使用`Marshaller`接口实现对象到XML的序列化。只需提供Java对象和输出目的地(如文件、流或字符串),`Marshaller.marshal()`方法就会...

    XML与Java对象互相转化Demo(Eclipse)

    2. **Java对象到XML的转化**:同样,需要先创建一个`JAXBContext`,然后获取一个Marshaller对象,调用`marshal()`方法将Java对象转化为XML字符串或写入XML文件。 在Eclipse项目"XML使用demo"中,可能包含了以下步骤...

    xml转对象封装的简单与复杂xml的转化写法

    将XML转换为对象是Java编程中常见的任务,它允许开发者更方便地处理XML数据,将XML文档结构映射到Java对象上。在Java中,JDOM库是一个流行的处理XML的API,提供了读取、创建和修改XML文档的功能。 标题提到的"xml转...

    java 对象的xml串行化 实现网络间的类信息的传输

    接下来,你可以使用`toXML()`方法将Java对象转化为XML字符串,或者使用`fromXML()`方法从XML字符串反序列化回Java对象。 例如,假设我们有一个简单的`Person`类: ```java public class Person { private String ...

    js转换对象为xml

    在现代的网络应用开发中,将JSON对象转换为XML格式是一项常见的需求。JavaScript作为一种在浏览器端和服务器端都广泛使用的编程语言,提供了一种灵活的方式来实现这一功能。本文将详细探讨如何使用JavaScript将对象...

    XMLDay01----将User对象写入xml文件

    本教程聚焦于如何将Java对象转化为XML文件,以便持久化数据。我们将通过一个名为"XMLDay01----将User对象写入xml文件"的案例来深入理解这一过程。 首先,我们有一个`User`对象,它代表了一个用户的数据模型。在`...

    C#对象和Xml对象的相互转化

    本篇文章将详细探讨C#对象与XML对象如何进行相互转化。 ### 1. C#对象转XML(对象序列化) **XML序列化** 是将C#对象转换为XML字符串或XML文档的过程。这通常通过`System.Xml.Serialization`命名空间中的`...

    使用xstream解析xml,xml与pojo的双向转化,完整的java 工程

    4. 序列化:将Java对象转化为XML字符串。使用`XStream.toXML()`方法,传入要转化的对象即可。 5. 反序列化:将XML字符串转化为Java对象。调用`XStream.fromXML()`方法,传入XML字符串,返回对应类型的Java对象。 6...

    字符串转化为XML文件

    本文将详细介绍字符串转化为XML文件的知识点,包括XML文件的基本结构、StringBuilder类的使用、XML文档对象模型(DOM)、XML文件的保存等。 XML文件的基本结构 XML(Extensible Markup Language)是一种标记语言,...

    XStream测试Demo-xml与java对象的相互转换

    序列化是指将Java对象转化为XML字符串的过程,这在保存或传输数据时非常有用。反序列化则是相反的过程,将XML字符串恢复为可操作的Java对象。这两个过程都通过XStream的简单API实现。 要开始使用XStream,你需要先...

    C# 源码 对象XML 将对象信息保存为XML

    1. **数据序列化**:数据序列化是将对象的状态转化为可以存储或传输的形式的过程。在C#中,XML序列化就是将对象转换为XML文档,而XML反序列化则是将XML文档恢复为对象实例。 2. **System.Xml.Serialization命名空间...

    jdom从数据库和xml拿数据生成xml

    最后,通过`Transformer`将构建好的`Document`对象转化为XML字符串或者写入到文件中。 6. **数据绑定**:为了从XML文件中提取数据,可以使用JDOM的`Element`类的`getChild`、`getChildren`、`getAttribute`等方法。...

    复杂XML的解析及组装

    此包可以解决XML文件的解析、对象转化为XML字符串的问题。 1 通过调用解析类,可以将XML的DATA数据转换为XmlNode对象,XmlNode以树形结构进行XML的数据封装,使用的时候按照树形结构进行数据的获取。(如有问题请...

    json自动转换成xml的json包

    例如,它可能包含一个名为`JsonToXmlConverter`的类,该类具有将JSON字符串或对象转化为XML字符串的方法。使用这个库,开发者无需手动编写转换代码,只需调用相应的API,即可完成转换任务,大大简化了开发流程。 在...

    XML转换为JAVA对象的方法

    将XML数据转换为Java对象,能够方便地在两者之间进行数据操作和处理。在这个过程中,XStream库扮演了关键角色。 XStream是一个强大的Java库,它可以将Java对象序列化为XML,同时也能将XML反序列化为等效的Java对象...

    Java操作XML文件-dom4j .doc

    2. **Document对象转化为XML字符串**: 反之,当需要将XML文档内容输出为字符串时,可以使用`XMLWriter`类。在代码中,`doc2String()`方法创建了一个`OutputFormat`对象,设置了编码为`GB2312`,然后创建了一个`XML...

    JAXB技术实现xml与java对象互相转化代码教程

    使用java jdk的JAXB技术实现xml与java对象互相转化代码教程: JDK中JAXB相关的重要Class和Interface:(来源于百度百科JAXB) •JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。 •Marshaller接口,将Java...

    XML序列化示例 XML

    XML序列化是将对象转化为XML格式的重要技术,它在数据交换、持久化和跨平台通信中扮演着关键角色。了解并掌握XML序列化能够帮助开发者更有效地处理和传递复杂的数据结构。同时,应根据项目需求选择合适的序列化方案...

    SFTp上传下载and xml解析丶生成

    2. 序列化:使用`toXML()`方法将Java对象转化为XML字符串。 3. 反序列化:通过`fromXML()`方法将XML字符串恢复为Java对象。 在你的项目中,你可能已经结合了这些技术,实现了SFTP的文件传输和XML的解析与生成功能。...

    JAVA对象与XML相互转化DEMO

    本示例"JAVA对象与XML相互转化DEMO"聚焦于如何在Java中实现对象与XML之间的互转,这对于理解和处理数据交换至关重要。 首先,Java中实现XML到对象的转换主要依赖于JAXB(Java Architecture for XML Binding)。JAXB...

Global site tag (gtag.js) - Google Analytics