• xmlBean学习二


    由上一遍的准备工作完成后,可以很简单的就进行对xml文件的操作,

    package com;
    
    import java.io.File;
    import java.io.IOException;
    
    import org.apache.xmlbeans.XmlException;
    
    import sample.xmlbean.AddressType;
    import sample.xmlbean.BillingAddressType;
    import sample.xmlbean.CustomerType;
    import sample.xmlbean.CustomersDocument;
    import sample.xmlbean.CustomersDocument.Customers;
    import sample.xmlbean.PrimaryAddressType;
    
    public class CustomerXMLBean  {
    
    	private String fileName=null;
    	public CustomerXMLBean(String fileName){
    		this.fileName=fileName;
    	}
    	/**
    	 * 读取xml文件
    	 */
    	public void customerReader(){
    		File file = new File(fileName);
    		try {
    			CustomersDocument document = CustomersDocument.Factory.parse(file);
    			Customers customers = document.getCustomers();
    			//System.out.println(customers);
    			CustomerType[] types = document.getCustomers().getCustomerArray();
    			for(CustomerType customer:types){
    				System.out.println(customer.getId());
    				System.out.println(customer.getGender());
    				System.out.println(customer.getFirstname()+" "+customer.getLastname());
    				System.out.println(customer.getPhoneNumber());
    				AddressType address = customer.getAddress();
    				//System.out.println(address);
    				PrimaryAddressType primaryAddress = address.getPrimaryAddress();
    				BillingAddressType billingAddress = address.getBillingAddress();
    				System.out.println("---------primaryAddress----------");
    				System.out.println(primaryAddress.getAddressLine1());
    				System.out.println(primaryAddress.getAddressLine2());
    				System.out.println(primaryAddress.getPostalCode());
    				System.out.println("---------billingAddress----------");
    				System.out.println(billingAddress.getReceiver());
    				System.out.println(billingAddress.getPostalCode());
    				System.out.println(billingAddress.getAddressLine1());
    			}
    		} catch (XmlException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	/**
    	 * 新建一个xml文件
    	 * @param args
    	 */
    	
    	public void createCustomer(){
    		/*//创建document
    		CustomersDocument doc = CustomersDocument.Factory.newInstance();
    		//添加customer
    		CustomerType customer = doc.addNewCustomers().addNewCustomer();
    		customer.setId(3);
    		customer.setGender("female");
    		customer.setFirstname("zhang");
    		customer.setLastname("san");
    		customer.setPhoneNumber("123456789");
    		//添加address
    		AddressType address = customer.addNewAddress();
    		//添加新的BillingAdress
    		BillingAddressType billingAddress = address.addNewBillingAddress();
    		billingAddress.setReceiver("lisi");
    		billingAddress.setPostalCode("53600");
    		billingAddress.setAddressLine1("guohui");
    		billingAddress.setAddressLine2("E5");
    		//添加新的PrimaryAddress
    		PrimaryAddressType primaryAddress = address.addNewPrimaryAddress();
    		primaryAddress.setPostalCode("23645456");
    		primaryAddress.setAddressLine1("wanshoulu");
    		primaryAddress.setAddressLine2("302");
    		File file = new File(fileName);
    		try {
    			doc.save(file);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}*/
    		 try{
             // Create Document<br />
             CustomersDocument doc = CustomersDocument.Factory.newInstance();
             // Add new customer<br />
             CustomerType customer = doc.addNewCustomers().addNewCustomer();
             // set customer info<br />
             customer.setId(3);
             customer.setFirstname("Jessica");
             customer.setLastname("Lim");
             customer.setGender("female");
             customer.setPhoneNumber("1234567"); // Add new address<br />
             AddressType address = customer.addNewAddress(); // Add new<br />
             // PrimaryAddress<br />
             PrimaryAddressType primaryAddress = address.addNewPrimaryAddress();
             primaryAddress.setPostalCode("350106");
             primaryAddress.setAddressLine1("#25-1");
             primaryAddress.setAddressLine2("SHINSAYAMA 2-CHOME"); // Add new<br />
             // BillingAddress<br />
             BillingAddressType billingAddress = address.addNewBillingAddress();
             billingAddress.setReceiver("Ms Danielle");
             billingAddress.setPostalCode("350107");
             billingAddress.setAddressLine1("#167");
             billingAddress.setAddressLine2("NORTH TOWER HARBOUR CITY");
             File xmlFile = new File(fileName);
             doc.save(xmlFile);
         } catch (Exception ex){
             ex.printStackTrace();
         }
    	}
    	/**
    	 * 添加一个customer节点
    	 */
    	 public void addNewCustomer() {  
            try {  
    	        File xmlFile = new File(fileName);  
    	        CustomersDocument doc = CustomersDocument.Factory.parse(xmlFile);  
    	        CustomerType customer = doc.getCustomers().addNewCustomer();
    	       System.out.println(customer.documentProperties()+"~~~~~~~~~");
    	        customer.setId(3);
    			customer.setGender("female");
    			customer.setFirstname("zhang");
    			customer.setLastname("san");
    			customer.setPhoneNumber("123456789");
    			//添加address
    			AddressType address = customer.addNewAddress();
    			//添加新的BillingAdress
    			BillingAddressType billingAddress = address.addNewBillingAddress();
    			billingAddress.setReceiver("lisi");
    			billingAddress.setPostalCode("53600");
    			billingAddress.setAddressLine1("guohui");
    			billingAddress.setAddressLine2("E5");
    			//添加新的PrimaryAddress
    			PrimaryAddressType primaryAddress = address.addNewPrimaryAddress();
    			primaryAddress.setPostalCode("23645456");
    			primaryAddress.setAddressLine1("wanshoulu");
    			primaryAddress.setAddressLine2("302");
    			//保存
    	        doc.save(xmlFile);  
             } catch (Exception ex) {  
              ex.printStackTrace();  
             }  
        }  
    	
    	 /**
    	  * 删除一个节点
    	  * @param args
    	  */
    	 public void deleteCustomer(){
    		 File file = new File(fileName);
    		 try {
    			CustomersDocument doc = CustomersDocument.Factory.parse(file);
    			CustomerType[] customers = doc.getCustomers().getCustomerArray();
    			for (int i = 0; i < customers.length; i++) {
    			        CustomerType customer = customers[i];
    			        if(customer.getId()==3){
    	                        customer.setNil() ;
    	                        break;
    			        }
    			}
    			doc.save(file);
    		} catch (XmlException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		 
    	 }
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		CustomerXMLBean b = new CustomerXMLBean("E:\code\workspace\XmlBean\customers.xml");
    		CustomerXMLBean b1 = new CustomerXMLBean("E:\code\workspace\XmlBean\customers1.xml");
    		b1.createCustomer();
    		//b.addNewCustomer();
    		b.deleteCustomer();
    		b1.customerReader();
    		b.customerReader();
    		
    	}
    
    

    以上代码除了删除的以外都可以运行出来,唯独删除,出错,报了以下异常:

    Exception in thread "main" org.apache.xmlbeans.impl.values.XmlValueNotNillableException
    	at org.apache.xmlbeans.impl.values.XmlObjectBase.setNil(XmlObjectBase.java:624)
    	at com.CustomerXMLBean.deleteCustomer(CustomerXMLBean.java:167)
    	at com.CustomerXMLBean.main(CustomerXMLBean.java:187)
    

     经过我反编译通过上篇使用scomp生成的jar包,发现接口中定义的setNil()方法并没有被实现重写,暂时没有想出问题出在哪,或许可能因为使用的xmlBean的版本太低导致,假如有读者也遇到问题,可以联系我,讨论一下,找出解决方法。

  • 相关阅读:
    win10-wifi无线共享自动关闭解决
    可用的nlog配置
    cmake 常用指令,变量
    window时间服务
    命令行配置服务启动类型
    boost流gzip压缩
    mysql 查询某表的所有列,获取毫秒时间戳
    system进程占用80端口
    centos8重新分区(减小/home空间,增大root空间)
    emqx使用data_to_webservice方式配置规则引擎简单实践
  • 原文地址:https://www.cnblogs.com/daimazhang/p/6117762.html
Copyright © 2020-2023  润新知