XMLBean写文件出现的问题及解决方法

        前一次些相关内容的时候,也有XML保存的描述。但是今天用的时候发现一个问题(所用XML模式见附录1):

       File file = new File(filename); 
       UrlsDocument doc;


       doc = UrlsDocument.Factory.newInstance();   
       UrlBeanType url = doc.addNewUrls().addNewUrl();   


       url.setUrlId(ub.getUrlId());
       url.setUrlDepth(ub.getUrlDepth());
       url.setUrlText(ub.getUrlText());


       doc.save(file);


       1. 如果每次都如上用doc = ***Document.Factory.newInstance();这样每次都新建了一个document,保存的时候恢复该原来的内容。解决方法是当文件文件不存在(或者内容为空)的时候采用如下方法:
   File file = new File(filename); 
   UrlsDocument doc;


   if(file.exists())
    doc = UrlsDocument.Factory.parse(file);
   else
    doc = UrlsDocument.Factory.newInstance();   


   UrlBeanType url = doc.addNewUrls().addNewUrl();   


   url.setUrlId(ub.getUrlId());
   url.setUrlDepth(ub.getUrlDepth());
   url.setUrlText(ub.getUrlText());


  doc.save(file);

     2. 上面的问题解决了,又出来新的。当往文件中保存了一个url时,文件格式正确。但是当再添加一个url时,root node 出现了一个<xml-fragment> 匿名容器。而原来的<urls>根节点变成它的字节点。不知道为什么?结果是把原来XML模式改变,再parse的时候就出错了。解决办法:

   File urlFile = new File(fn);   
   UrlBeanType url;
   UrlsDocument doc;
   UrlsDocument.Urls urls;
   
   if(urlFile.exists())
   {
    doc = UrlsDocument.Factory.parse(urlFile);
    urls = doc.getUrls();
    url = urls.addNewUrl();   
   }
   else
   {
    doc = UrlsDocument.Factory.newInstance();
    url = doc.addNewUrls().addNewUrl();
   }   


   url.setUrlId(ub.getUrlId());
   url.setUrlDepth(ub.getUrlDepth());
   url.setUrlText(ub.getUrlText());
   
   XmlOptions xmlOptions = new XmlOptions();
   xmlOptions.setSavePrettyPrint();                                // 是文件中的格式美观
         
   doc.save(urlFile, xmlOptions);

附录1

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
 <xs:element name="urls">
  <xs:complexType>
   <xs:sequence>

    <xs:element name="url" type="urlBeanType" maxOccurs="unbounded"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:complexType name="urlBeanType">
  <xs:sequence>
   <xs:element name="url_id" type="xs:string"/>
   <xs:element name="url_depth" type="xs:int"/>   
   <xs:element name="url_text" type="xs:string"/>
  </xs:sequence>
 </xs:complexType>
</xs:schema>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值