> 백엔드 개발 > XML/RSS 튜토리얼 > Jibx가 XML을 처리합니다.

Jibx가 XML을 처리합니다.

黄舟
풀어 주다: 2017-02-18 15:18:23
원래의
1840명이 탐색했습니다.

이전에 json-lib 프레임워크를 소개한 적이 있습니다. 온라인 블로그 게시물: http://www.php.cn/

Jackson 프레임워크, 온라인 블로그 게시물: http://www.php. cn/

모두 Java 객체를 XML로 변환할 수 있지만 아직 완벽하지는 않습니다.

XStream은 JSON 및 XML도 지원하므로 JSON 또는 XML을 완벽하게 변환할 수 있습니다. 온라인 블로그 게시물:

http://www.php.cn/

및 Castor를 소개하여 Java 객체를 xml로 변환하는 작업을 완료합니다. 온라인 블로그: http://www.php.cn/

Jaxb2는 xml 변환을 완료하고, 온라인 블로그: http://www.php.cn/

Jibx는 Java 객체를 변환합니다. xml을 구성해야 할 뿐만 아니라 해당 jar 파일과 xsd 파일도 생성해야 합니다. Jibx가 Java를 XML로 변환하는 방법을 살펴보겠습니다.

1. 준비

1. 리소스 준비

a) 공식 예: http://www.php .cn/

http://www.php.cn/

b) Jar 다운로드: http://www.php.cn/

c) 종속성 jar 패키지는 다음과 같습니다.

Jibx가 XML을 처리합니다.

2. 프로그램 준비코드



package com.hoo.test;
로그인 후 복사

아아앙

아아아아

아아아아

아아아아

아아아아

아아앙

아아아아

아아아아

아아아아

아아아아

아아앙

아아아아

아아아아

아아아아

아아아아

아아앙

아아아아

아아아아

아아아아

아아아아

아아아

아아아아

아아아아

아아아아

아아아아

아아아

아아아아

아아아아

아아아아

아아아아

아아아

아아아아

아아아아

아아아아

아아아아

아아아

아아아아

아아아아

아아아아

아아아아

아아아

아아아아

아아아아

아아아아

아아아아

아아아

아아아아

아아아아

아아아아

아아아아

아아앙

아아아아

아아아아

아아아아

아아아아

아아앙

아아아아

아아아아

아아아아

아아아아

아아앙

아아아아

아아아아

아아아아

아아아아

아아앙

아아아아

아아아아

아아아아

아아아아

아아앙

아아아아

아아아아

아아아아

아아아아

아아앙

아아아아

아아아아

아아아아

아아아아

 <br>
로그인 후 복사

import java.io.IOException;
로그인 후 복사

import java.io.StringReader;
로그인 후 복사


IBindingFactory는 공장 인터페이스입니다. BindingDirectory Factory 메소드의 getFactory는 객체를 얻을 수 있습니다. 그러면 이 프로젝트를 통해 XML 문서를 변환하기 위한 컨텍스트를 얻을 수 있습니다.

二、 转换JavaXML、转换XMLJava

1、 转换JavaEntity对象

a) 首先看看Account、Birthday的代码

package com.hoo.entity;
   
 
   
public class Account {
   
    private int id;
   
    private String name;
   
    private String email;
   
    private String address;
   
    private Birthday birthday;
   
    //getter、setter
   
    
   
    @Override
   
    public String toString() {
   
        return this.id + "#" + this.name + "#" + this.email + "#" + this.address + "#" + this.birthday;
   
    }
   
}
로그인 후 복사


Birthday

package com.hoo.entity;
   
 
   
public class Birthday {
   
    private String birthday;
   
    
   
    public Birthday(String birthday) {
   
        super();
   
        this.birthday = birthday;
   
    }
   
    //getter、setter
   
    public Birthday() {}
   
    
   
    @Override
   
    public String toString() {
   
        return this.birthday;
   
    }
   
}
로그인 후 복사


b) 程序代码



@Test
로그인 후 복사
로그인 후 복사

public void bean2XML() {
로그인 후 복사

    try {
로그인 후 복사
로그인 후 복사

        writer = new StringWriter();
로그인 후 복사

        // marshal 编组
로그인 후 복사
로그인 후 복사

        IMarshallingContext mctx = factory.createMarshallingContext();
로그인 후 복사
로그인 후 복사

        mctx.setIndent(2);
로그인 후 복사
로그인 후 복사

        mctx.marshalDocument(bean, "UTF-8", null, writer);
로그인 후 복사

        fail(writer);
로그인 후 복사
로그인 후 복사

        <br/>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

        reader = new StringReader(writer.toString());
로그인 후 복사
로그인 후 복사

        //unmarshal 解组
로그인 후 복사
로그인 후 복사

        IUnmarshallingContext uctx = factory.createUnmarshallingContext();
로그인 후 복사
로그인 후 복사

        Account acc = (Account) uctx.unmarshalDocument(reader, null);
로그인 후 복사

        fail(acc);
로그인 후 복사

    } catch (Exception e) {
로그인 후 복사
로그인 후 복사

        e.printStackTrace();
로그인 후 복사
로그인 후 복사

    }
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

}
로그인 후 복사
로그인 후 복사
로그인 후 복사


这样还不够,复杂的东西还在后面。Jibx转换XML文档还要经过一系列复杂的程序。

c) 首先,要写bind.xml和schema。不过还好,官方有提高工具类可以用。

org.jibx.binding.generator.BindGen或org.jibx.binding.BindingGenerator这两个类都可以,用法如下:

首先用dos进入当前工程目录,然后执行命令:E:/Study/WebHttpUtils>java -cp bin;lib/jibx-tools.jar;lib/log4j-1.2.16.jar org.jibx.binding.generator.BindGen -b bind.xml com.hoo.entity.Account

上面的java 是运行某个程序 –cp是依赖的classpath路径的jar、zip等文件,-b 是输出文件名称,是BindGen类的参数。这样会在当前工程目录中生成bind.xml和entity.xsd文件。先看看这2个文件

bind.xml



?xml version="1.0" encoding="UTF-8"?>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

binding value-style="attribute">
로그인 후 복사
로그인 후 복사
로그인 후 복사

  mapping class="com.hoo.entity.Account" name="account">
로그인 후 복사

    value name="id" field="id"/>
로그인 후 복사

    value style="element" name="name" field="name" usage="optional"/>
로그인 후 복사

    value style="element" name="email" field="email" usage="optional"/>
로그인 후 복사

    value style="element" name="address" field="address" usage="optional"/>
로그인 후 복사

    structure field="birthday" usage="optional" name="birthday">
로그인 후 복사

      value style="element" name="birthday" field="birthday" usage="optional"/>
로그인 후 복사

    /structure>
로그인 후 복사

  /mapping>
로그인 후 복사

/binding>
로그인 후 복사


entity.xsd文件

xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://hoo.com/entity"
   
elementFormDefault="qualified" targetNamespace="http://hoo.com/entity">
   
  xs:element type="tns:account" name="account"/>
   
  xs:complexType name="account">
   
    xs:sequence>
   
      xs:element type="xs:string" name="name" minOccurs="0"/>
   
      xs:element type="xs:string" name="email" minOccurs="0"/>
   
      xs:element type="xs:string" name="address" minOccurs="0"/>
   
      xs:element name="birthday" minOccurs="0">
   
        xs:complexType>
   
          xs:sequence>
   
            xs:element type="xs:string" name="birthday" minOccurs="0"/>
   
          /xs:sequence>
   
        /xs:complexType>
   
      /xs:element>
   
    /xs:sequence>
   
    xs:attribute type="xs:int" use="required" name="id"/>
   
  /xs:complexType>
   
/xs:schema>
로그인 후 복사


上面最重要的就是bind.xml文件了,下面编译的时候需要这个文件。Xsd文件可以根据这个文件的内容生成Java的Entity类代码。

执行完命令后,没有错误就可以运行下面一段命令了。运行命令:

E:/Study/WebHttpUtils>java -cp bin;lib/jibx-bind.jar org.jibx.binding.Compile -v bind.xml

-v是绑定文件的名称

运行后,有如下结果:

Jibx가 XML을 처리합니다.

d) 然后你就可以运行上面的Java的Junit测试程序了,运行后结果如下:

?xml version="1.0" encoding="UTF-8"?>
   
account xmlns="http://hoo.com/entity" id="1">
   
  name>jack/name>
   
  email>email/email>
   
  address>北京/address>
   
  birthday>
   
    birthday>2010-11-22/birthday>
   
  /birthday>
   
/account>
   
1#jack#email#北京#2010-11-22
로그인 후 복사


你还可以用命令来查看某个已经生成bind、schema文件的信息,如:

java -cp bin;lib/jibx-run.jar org.jibx.runtime.PrintInfo -c com.hoo.entity.Account

结果如下:

Jibx가 XML을 처리합니다.

e) 注意,有时候会出现异常信息,如:java.lang.NoSuchFieldException: JiBX_bindingXXXX就要重复下面的命令就可以了。

java -cp bin;lib/jibx-bind.jar org.jibx.binding.Compile -v bind.xml

2、 转换带List集合属性的JavaBean

a) 程序代码



@Test
로그인 후 복사
로그인 후 복사

public void listBean2XML() {
로그인 후 복사

    try {
로그인 후 복사
로그인 후 복사

        ListBean listBean = new ListBean();
로그인 후 복사

        Listlist = new ArrayList();
로그인 후 복사

        list.add(bean);
로그인 후 복사

        bean = new Account();
로그인 후 복사

        bean.setAddress("china");
로그인 후 복사

        bean.setEmail("tom@125.com");
로그인 후 복사

        bean.setId(2);
로그인 후 복사

        bean.setName("tom");
로그인 후 복사

        Birthday day = new Birthday("2010-11-22");
로그인 후 복사

        bean.setBirthday(day);
로그인 후 복사

        <br/>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

        list.add(bean);
로그인 후 복사

        listBean.setList(list);
로그인 후 복사

        <br/>
로그인 후 복사
로그인 후 복사

        <br/>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

        writer = new StringWriter();
로그인 후 복사

        factory = BindingDirectory.getFactory(ListBean.class);
로그인 후 복사

        // marshal 编组
로그인 후 복사
로그인 후 복사

        IMarshallingContext mctx = factory.createMarshallingContext();
로그인 후 복사
로그인 후 복사

        mctx.setIndent(2);
로그인 후 복사
로그인 후 복사

        mctx.marshalDocument(listBean, "UTF-8", null, writer);
로그인 후 복사

        fail(writer);
로그인 후 복사
로그인 후 복사

        <br/>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

        reader = new StringReader(writer.toString());
로그인 후 복사
로그인 후 복사

        //unmarshal 解组
로그인 후 복사
로그인 후 복사

        IUnmarshallingContext uctx = factory.createUnmarshallingContext();
로그인 후 복사
로그인 후 복사

        listBean = (ListBean) uctx.unmarshalDocument(reader, null);
로그인 후 복사

        <br/>
로그인 후 복사
로그인 후 복사

        fail(listBean.getList().get(0));
로그인 후 복사

        fail(listBean.getList().get(1));
로그인 후 복사

    } catch (Exception e) {
로그인 후 복사
로그인 후 복사

        e.printStackTrace();
로그인 후 복사
로그인 후 복사

    }
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

}
로그인 후 복사
로그인 후 복사
로그인 후 복사


b) ListBean代码



package com.hoo.entity;
로그인 후 복사
로그인 후 복사
로그인 후 복사

 <br/>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

import java.util.List;
로그인 후 복사

 <br/>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

public class ListBean {
로그인 후 복사

    private String name;
로그인 후 복사

    private List list;
로그인 후 복사

}
로그인 후 복사
로그인 후 복사


c) 生成bind.xml

执行dos命令:

java -cp bin;lib/jibx-tools.jar;lib/log4j-1.2.16.jar org.jibx.binding.BindingGenerator -f bind.xml com.hoo.entity.ListBean

输出:

Jibx가 XML을 처리합니다.

d) 执行完后会生产bind.xml

Bind文件



?xml version="1.0" encoding="UTF-8"?>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

binding value-style="attribute">
로그인 후 복사
로그인 후 복사
로그인 후 복사

  mapping class="com.hoo.entity.ListBean" name="list-bean">
로그인 후 복사

    value style="element" name="name" field="name" usage="optional"/>
로그인 후 복사

    collection field="list" usage="optional" factory="org.jibx.runtime.Utility.arrayListFactory"/>
로그인 후 복사

  /mapping>
로그인 후 복사

/binding>
로그인 후 복사
로그인 후 복사


e) 运行Compile工具类

在运行前,一定要将最先前运行的Account那个类的bind.xml文件的内容加入到现在这个bind.xml中,因为ListBean依赖了Account这个类。

命令如下:

java -cp bin;lib/jibx-bind.jar org.jibx.binding.Compile -v bind.xml

运行后你可以看到最后出现这个

Jibx가 XML을 처리합니다.

f) 运行Test程序,结果如下:

?xml version="1.0" encoding="UTF-8"?>
   
list-bean>
   
  account id="1">
   
    name>jack/name>
   
    email>email/email>
   
    address>北京/address>
   
    birthday>
   
      birthday>2010-11-22/birthday>
   
    /birthday>
   
  /account>
   
  account id="2">
   
    name>tom/name>
   
    email>tom@125.com/email>
   
    address>china/address>
   
    birthday>
   
      birthday>2010-11-22/birthday>
   
    /birthday>
   
  /account>
   
/list-bean>
   
1#jack#email#北京#2010-11-22
   
2#tom#tom@125.com#china#2010-11-22
로그인 후 복사

3、 转换Java对象数组

a) Test程序

/**
   
 * function:转换对象数组
   
 * @author hoojo
   
 * @createDate 2011-4-26 下午05:32:03
   
 */
   
@Test
   
public void arrayBean2XML() {
   
    try {
   
        Account[] acc = new Account[2];
   
        acc[0] = bean;
   
        bean = new Account();
   
        bean.setName("tom");
   
        bean.setId(223);
   
        acc[1] = bean;
   
        AccountArray array = new AccountArray();
   
        array.setAccounts(acc);
   
        
   
        
   
        writer = new StringWriter();
   
        factory = BindingDirectory.getFactory(AccountArray.class);
   
        // marshal 编组
   
        IMarshallingContext mctx = factory.createMarshallingContext();
   
        mctx.setIndent(2);
   
        mctx.marshalDocument(array, "UTF-8", null, writer);
   
        fail(writer);
   
        
   
        reader = new StringReader(writer.toString());
   
        //unmarshal 解组
   
        IUnmarshallingContext uctx = factory.createUnmarshallingContext();
   
        array = (AccountArray) uctx.unmarshalDocument(reader, null);
   
        
   
        fail(array.getAccounts()[0]);
   
        fail(array.getAccounts()[1]);
   
    } catch (Exception e) {
   
        e.printStackTrace();
   
    }
   
}
로그인 후 복사


b) AccountArray代码



package com.hoo.entity;
로그인 후 복사
로그인 후 복사
로그인 후 복사

 <br/>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

public class AccountArray {
로그인 후 복사

    private Account[] accounts;
로그인 후 복사

    private int size;
로그인 후 복사

    public int getSize() {
로그인 후 복사

        size = accounts.length;
로그인 후 복사

        return size;
로그인 후 복사

    }
로그인 후 복사
로그인 후 복사
로그인 후 복사

    public void setSize(int size) {
로그인 후 복사

        this.size = size;
로그인 후 복사

    }
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

    public Account[] getAccounts() {
로그인 후 복사

        return accounts;
로그인 후 복사

    }
로그인 후 복사
로그인 후 복사
로그인 후 복사

    public void setAccounts(Account[] accounts) {
로그인 후 복사

        this.accounts = accounts;
로그인 후 복사

    }
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

}
로그인 후 복사
로그인 후 복사
로그인 후 복사


c) 运行命令生成bind.xml文件

命令如下:

java -cp bin;lib/jibx-tools.jar;lib/log4j-1.2.16.jar org.jibx.binding.BindingGenerator -f bind.xml com.hoo.entity.Account com.hoo.entity.AccountArray

因为AccountArray依赖Account,所以后面带2个类

Jibx가 XML을 처리합니다.

d) 运行Compile命令

java -cp bin;lib/jibx-bind.jar org.jibx.binding.Compile -v bind.xml

e) 执行完后,就可以运行Test程序了,结果如下



?xml version="1.0" encoding="UTF-8"?>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

account-array size="0">
로그인 후 복사

  account id="1">
로그인 후 복사

    name>jack/name>
로그인 후 복사

    email>email/email>
로그인 후 복사

    address>北京/address>
로그인 후 복사

    birthday>
로그인 후 복사

      birthday>2010-11-22/birthday>
로그인 후 복사

    /birthday>
로그인 후 복사

  /account>
로그인 후 복사

  account id="223">
로그인 후 복사

    name>tom/name>
로그인 후 복사

  /account>
로그인 후 복사

/account-array>
로그인 후 복사

1#jack#email#北京#2010-11-22
로그인 후 복사

223#tom#null#null#null
로그인 후 복사


4、 转换带Map结合的JavaEntity对象

a) Test代码

/**
   
 * function:转换Map集合
   
 * @author hoojo
   
 * @createDate 2011-4-26 下午05:40:34
   
 */
   
@Test
   
public void mapBean2XML() {
   
    try {
   
        MapBean mapBean = new MapBean();
   
        HashMapmap = new HashMap();
   
        map.put("No1", bean);
   
        
   
        bean = new Account();
   
        bean.setAddress("china");
   
        bean.setEmail("tom@125.com");
   
        bean.setId(2);
   
        bean.setName("tom");
   
        Birthday day = new Birthday("2010-11-22");
   
        bean.setBirthday(day);
   
        
   
        map.put("No2", bean);
   
        mapBean.setMap(map);
   
        
   
        factory = BindingDirectory.getFactory(MapBean.class);
   
        writer = new StringWriter();
   
        // marshal 编组
   
        IMarshallingContext mctx = factory.createMarshallingContext();
   
        mctx.setIndent(2);
   
        mctx.marshalDocument(mapBean, "UTF-8", null, writer);
   
        fail(writer);
   
        
   
        reader = new StringReader(writer.toString());
   
        //unmarshal 解组
   
        IUnmarshallingContext uctx = factory.createUnmarshallingContext();
   
        mapBean = (MapBean) uctx.unmarshalDocument(reader, null);
   
        
   
        fail(mapBean.getMap());
   
        fail(mapBean.getMap().get("No1"));
   
        fail(mapBean.getMap().get("No2"));
   
    } catch (Exception e) {
   
        e.printStackTrace();
   
    }
   
}
로그인 후 복사


b) MapBean代码



package com.hoo.entity;
로그인 후 복사
로그인 후 복사
로그인 후 복사

 <br/>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

import java.util.HashMap;
로그인 후 복사

 <br/>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

public class MapBean {
로그인 후 복사

    private HashMapmap;
로그인 후 복사

    <br/>
로그인 후 복사

    public HashMapgetMap() {
로그인 후 복사

        return map;
로그인 후 복사

    }
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

    public void setMap(HashMapmap) {
로그인 후 복사

        this.map = map;
로그인 후 복사

    }
로그인 후 복사
로그인 후 복사
로그인 후 복사

}
로그인 후 복사
로그인 후 복사


c) 生成bind.xml,命令如下

E:/Study/WebHttpUtils>java -cp bin;lib/jibx-tools.jar;lib/log4j-1.2.16.jar org.jibx.binding.BindingGenerator -f bind.xml com.hoo.entity.Account com.hoo.entity.MapBean

运行后,会生产bind.xml;修改bind.xml内容如下:



?xml version="1.0" encoding="UTF-8"?>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사

binding value-style="attribute">
로그인 후 복사
로그인 후 복사
로그인 후 복사

    mapping class="com.hoo.entity.Account" name="account">
로그인 후 복사

        value name="id" field="id" />
로그인 후 복사

        value style="element" name="name" field="name" usage="optional" />
로그인 후 복사

        value style="element" name="email" field="email" usage="optional" />
로그인 후 복사

        value style="element" name="address" field="address" usage="optional" />
로그인 후 복사

        structure field="birthday" usage="optional" name="birthday">
로그인 후 복사

            value style="element" name="birthday" field="birthday" usage="optional" />
로그인 후 복사

        /structure>
로그인 후 복사

    /mapping>
로그인 후 복사

    mapping class="com.hoo.entity.MapBean" name="map-bean">
로그인 후 복사

        structure field="map" usage="optional" name="map"
로그인 후 복사

            marshaller="com.hoo.util.HashMapper" unmarshaller="com.hoo.util.HashMapper">
로그인 후 복사

        /structure>
로그인 후 복사

    /mapping>
로그인 후 복사

/binding>
로그인 후 복사
로그인 후 복사


注意上面的MapBean的structure元素的内容是经过修改的。一定要带上marshaller或unmarshaller,不然无法转换HashMap的。

d) HashMapper代码

package com.hoo.util;
   
 
   
import java.util.HashMap;
   
import java.util.Iterator;
   
import java.util.Map;
   
import org.jibx.runtime.IAliasable;
   
import org.jibx.runtime.IMarshallable;
   
import org.jibx.runtime.IMarshaller;
   
import org.jibx.runtime.IMarshallingContext;
   
import org.jibx.runtime.IUnmarshaller;
   
import org.jibx.runtime.IUnmarshallingContext;
   
import org.jibx.runtime.JiBXException;
   
import org.jibx.runtime.impl.MarshallingContext;
   
import org.jibx.runtime.impl.UnmarshallingContext;
   
 
   
/**
   
 * function:http://www.php.cn/ 
 * @file HashMapper.java
 * @package com.hoo.util   
 * @project WebHttpUtils   
 * @blog http://www.php.cn/   
 * @email hoojo_@126.com   
 * @version 1.0   
 */   
public class HashMapper implements IMarshaller, IUnmarshaller, IAliasable   
{
       private static final String SIZE_ATTRIBUTE_NAME = "size";   
    private static final String ENTRY_ELEMENT_NAME = "entry";   
    private static final String KEY_ATTRIBUTE_NAME = "key";   
    private static final int DEFAULT_SIZE = 10;   
       
    private String m_uri;
   
    private int m_index;
   
    private String m_name;
   
    
   
    public HashMapper() {
   
        m_uri = null;
   
        m_index = 0;
   
        m_name = "hashmap";
   
    }
   
    
   
    public HashMapper(String uri, int index, String name) {
   
        m_uri = uri;
   
        m_index = index;
   
        m_name = name;
   
    }
   
    
   
    /* (non-Javadoc)
   
     * @see org.jibx.runtime.IMarshaller#isExtension(int)
   
     */
   
    
   
    public boolean isExtension(int index) {
   
        return false;
   
    }
   
 
   
    /* (non-Javadoc)
   
     * @see org.jibx.runtime.IMarshaller#marshal(java.lang.Object,
   
     *  org.jibx.runtime.IMarshallingContext)
   
     */
   
    
   
    public void marshal(Object obj, IMarshallingContext ictx)
   
        throws JiBXException {
   
        
   
        // make sure the parameters are as expected
   
        if (!(obj instanceof HashMap)) {
   
            throw new JiBXException("Invalid object type for marshaller");
   
        } else if (!(ictx instanceof MarshallingContext)) {
   
            throw new JiBXException("Invalid object type for marshaller");
   
        } else {
   
            
   
            // start by generating start tag for container
   
            MarshallingContext ctx = (MarshallingContext)ictx;
   
            HashMap map = (HashMap)obj;
   
            ctx.startTagAttributes(m_index, m_name).
   
                attribute(m_index, SIZE_ATTRIBUTE_NAME, map.size()).
   
                closeStartContent();
   
            
   
            // loop through all entries in hashmap
   
            Iterator iter = map.entrySet().iterator();
   
            while (iter.hasNext()) {
   
                Map.Entry entry = (Map.Entry)iter.next();
   
                ctx.startTagAttributes(m_index, ENTRY_ELEMENT_NAME);
   
                if (entry.getKey() != null) {
   
                    ctx.attribute(m_index, KEY_ATTRIBUTE_NAME,
   
                        entry.getKey().toString());
   
                }
   
                ctx.closeStartContent();
   
                if (entry.getValue() instanceof IMarshallable) {
   
                    ((IMarshallable)entry.getValue()).marshal(ctx);
   
                    ctx.endTag(m_index, ENTRY_ELEMENT_NAME);
   
                } else {
   
                    throw new JiBXException("Mapped value is not marshallable");
   
                }
   
            }
   
            
   
            // finish with end tag for container element
   
            ctx.endTag(m_index, m_name);
   
        }
   
    }
   
 
   
    /* (non-Javadoc)
   
     * @see org.jibx.runtime.IUnmarshaller#isPresent(org.jibx.runtime.IUnmarshallingContext)
   
     */
   
     
   
    public boolean isPresent(IUnmarshallingContext ctx) throws JiBXException {
   
        return ctx.isAt(m_uri, m_name);
   
    }
   
 
   
    /* (non-Javadoc)
   
     * @see org.jibx.runtime.IUnmarshaller#unmarshal(java.lang.Object,
   
     *  org.jibx.runtime.IUnmarshallingContext)
   
     */
   
     
   
    public Object unmarshal(Object obj, IUnmarshallingContext ictx)
   
        throws JiBXException {
   
        
   
        // make sure we&#39;re at the appropriate start tag
   
        UnmarshallingContext ctx = (UnmarshallingContext)ictx;
   
        if (!ctx.isAt(m_uri, m_name)) {
   
            ctx.throwStartTagNameError(m_uri, m_name);
   
        }
   
        
   
        // create new hashmap if needed
   
        int size = ctx.attributeInt(m_uri, SIZE_ATTRIBUTE_NAME, DEFAULT_SIZE);
   
        HashMap map = (HashMap)obj;
   
        if (map == null) {
   
            map = new HashMap(size);
   
        }
   
        
   
        // process all entries present in document
   
        ctx.parsePastStartTag(m_uri, m_name);
   
        while (ctx.isAt(m_uri, ENTRY_ELEMENT_NAME)) {
   
            Object key = ctx.attributeText(m_uri, KEY_ATTRIBUTE_NAME, null);
   
            ctx.parsePastStartTag(m_uri, ENTRY_ELEMENT_NAME);
   
            Object value = ctx.unmarshalElement();
   
            map.put(key, value);
   
            ctx.parsePastEndTag(m_uri, ENTRY_ELEMENT_NAME);
   
        }
   
        ctx.parsePastEndTag(m_uri, m_name);
   
        return map;
   
    }
   
 
   
    public boolean isExtension(String arg0) {
   
        return false;
   
    }
   
}
로그인 후 복사


e) 然后运行Compile命令

E:/Study/WebHttpUtils>java -cp bin;lib/jibx-bind.jar org.jibx.binding.Compile -v bind.xml

f) 结果如下


  
    
      
        tom
        tom@125.com
        
china
2010-11-22
jack email
北京
2010-11-22
{No2=2#tom#tom@125.com#china#2010-11-22, No1=1#jack#email#北京#2010-11-22} 1#jack#email#北京#2010-11-22 2#tom#tom@125.com#china#2010-11-22 顶
로그인 후 복사

 以上就是Jibx 处理XML的内容,更多相关内容请关注PHP中文网(www.php.cn)!












관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿