﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava--随笔分类-文件处理</title><link>http://www.blogjava.net/leekiang/category/29573.html</link><description>MDA/MDD/TDD/DDD/DDDDDDD</description><language>zh-cn</language><lastBuildDate>Fri, 18 Mar 2011 22:52:53 GMT</lastBuildDate><pubDate>Fri, 18 Mar 2011 22:52:53 GMT</pubDate><ttl>60</ttl><item><title>正则表达式笔记</title><link>http://www.blogjava.net/leekiang/archive/2010/04/21/318955.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Wed, 21 Apr 2010 04:30:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2010/04/21/318955.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/318955.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2010/04/21/318955.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/318955.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/318955.html</trackback:ping><description><![CDATA[String regex = "&lt;a.*?/a&gt;";//取链接<br />        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);<br />        Matcher mt = pattern.matcher(str);<br />        while (mt.find()) {<br />        String s=mt.group();<br />        }<br />        String regex2 = "&gt;.*?&lt;/a&gt;";// 标题部分<br />        String regex3 = "imgs/[([0-9])]+.(jpg|gif|png|bmp)";//取图片<br /><br />输入例子可产生正则表达式<br />http://sourceforge.net/projects/quickrex/<br /><br />在线测试<br />http://www.fileformat.info/tool/regex.htm<br /><br /><img src ="http://www.blogjava.net/leekiang/aggbug/318955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2010-04-21 12:30 <a href="http://www.blogjava.net/leekiang/archive/2010/04/21/318955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dom4j用法</title><link>http://www.blogjava.net/leekiang/archive/2009/10/25/299681.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Sun, 25 Oct 2009 10:43:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2009/10/25/299681.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/299681.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2009/10/25/299681.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/299681.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/299681.html</trackback:ping><description><![CDATA[    String  xml="&lt;?xml version=\"1.0\" encoding=\"GBK\" ?&gt;&lt;root&gt;&lt;test&gt;0&lt;/test&gt;&lt;/root&gt;";<br />   应该使用Document document = saxReader.read(new ByteArrayInputStream(xml.getBytes()));  <br />如果使用Document   document   =   saxReader.read(xml);会报no protocol 异常<br />如果xml的encoding="utf-8"，则xml.getBytes()要改为xml.getBytes("utf-8"),否则会报错<br /><br />Element root=  document.getRootElement();<br />得到root后取子元素，既可以<br />Element e=root.element("test");<br />也可以<br />for (Iterator it = root.elementIterator(); it.hasNext();) { <br />Element e = (Element) it.next(); <br />    String n = e.getName(); <br />   String v=e.getStringValue()<br />}<br /><br /><br /><a href="http://www.javatx.cn/clubPage.jsp?ccStyle=0&amp;ccID=15&amp;tID=1922">http://www.javatx.cn/clubPage.jsp?ccStyle=0&amp;ccID=15&amp;tID=1922</a><br /><a href="http://lavasoft.blog.51cto.com/62575/66953">http://lavasoft.blog.51cto.com/62575/66953</a><img src ="http://www.blogjava.net/leekiang/aggbug/299681.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2009-10-25 18:43 <a href="http://www.blogjava.net/leekiang/archive/2009/10/25/299681.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>纯文本文档格式</title><link>http://www.blogjava.net/leekiang/archive/2009/08/30/293227.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Sun, 30 Aug 2009 13:34:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2009/08/30/293227.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/293227.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2009/08/30/293227.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/293227.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/293227.html</trackback:ping><description><![CDATA[DocBook或 reStructuredText都是纯文本文档格式。也可以考虑xlst<br />StructuredText和reStructuredText不一样<br /><br />Sphinx简单来说，是一个文档生成工具，用于把reStructuredText 格式的源文件生成诸如HTML, PDF, LaTex一类的格式。编辑者无须亲自处理文本的格式, 程序会自动根据源文件里的设置产生格式, 以及自动生成章节链接等工作。<br />包括 Python , Django 的文档，全部是使用Sphinx 生成的<br />http://sphinx.pocoo.org/<br /><br />我是如何写博客的<br />http://www.cnblogs.com/mindsbook/archive/2009/07/09/how_do_i_write_blog.html<br />http://www.cnblogs.com/mindsbook/archive/2009/07/15/how_can_i_write_blog_part2.html<br />该文主要介绍了如何使用 <a class="reference external" href="http://docutils.sourceforge.net/rst.html">restructuredText</a> (简称为reST)来写博客， 并且介绍了使用 <a class="reference external" href="http://www.googlecode.com/">google code</a> 来管理博客源文件的方法。<br /><br />另，Sphinx是一个基于SQL的全文检索引擎，可以结合MySQL,PostgreSQL做全文搜索，它可以提供比数据库本身更专业的搜索功能，使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口，如PHP,Python,Perl,Ruby等，同时为MySQL 也设计了一个存储引擎插件<br /><br />txt2tags 支持带数字编号的标题<br />从txt2tags回归markdown  http://sinolog.it/?p=503<br /><br />再找找比较好的wiki：<br />MediaWiki全球最著名的开源wiki引擎，运行于PHP+MySQL环境。<br />ViKi， 就是 VIM WiKi 的缩写。 WiKi 是一种非常方便快捷地组织信息的方式， 而 ViKi 作为一种“Personal WiKi”， 能够非常快捷地完成个人主页的制作， ViKi 可以支持许多很复杂， 功能很强大的语法。deplate是viki的编译工具。<br /><br />Javascript闭包真经http://w3er.com/blog/2009/03/master-javascript-closure/<br /><br />Stack Overflow和GitHub都在用markdown<br />wmd(http://wmd-editor.com,https://github.com/derobins/wmd)是一个专门为Markdown做的在线编辑器,StackOverflow和qingbo.net也用了<br />https://github.com/philc/vimium/blob/master/README.markdown<br /><a target="_blank" href="http://qingbo.net/picky/502-markdown-syntax.html">Markdown 语法</a><br /><a target="_blank" href="http://qingbo.net/picky/509-column-editing.html">支持列编辑模式的编辑器</a><br /><a target="_blank" href="https://github.com/schacon/showoff">showoff</a>支持用编写markdown脚本的方式在浏览器里显示ppt，<a target="_blank" href="http://railsconf2010.rickbradley.com/">例子</a><br /><a href="http://blog.shine-it.net/vim/send_blog_from_vim_with_formats">在Vim中发布博客内容到WordPress</a> (reStructuredText)<br /><br />目前最完善的介绍轻量级标记语言的资料：http://en.wikipedia.org/wiki/Lightweight_markup_language<br />以后不要叫结构化文本了，因为Structured Text已有另外的含义，见<a target="_blank" href="http://en.wikipedia.org/wiki/Structured_text">维基百科</a><br /><img src ="http://www.blogjava.net/leekiang/aggbug/293227.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2009-08-30 21:34 <a href="http://www.blogjava.net/leekiang/archive/2009/08/30/293227.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POI处理Excel公式的乱码问题</title><link>http://www.blogjava.net/leekiang/archive/2009/07/29/288896.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Wed, 29 Jul 2009 07:59:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2009/07/29/288896.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/288896.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2009/07/29/288896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/288896.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/288896.html</trackback:ping><description><![CDATA[前几天做项目的过程中，利用到Apache项目中的POI来实现基于Excel的数据模板输出，其中利用公式的方式嵌入超链接进行网页链接访问。   <br />
 
自己做了一些处理EXCEL单元格的方法，但在进行公式处理时，由于POI的问题，显示的公式信息一直都是乱码，后来在网上找到一些朋友关于这些问题的解
决方法，感觉帮助很大。因此，结合自己的实践经验，把修改POI内部源码的过程写出来，以其对资料做一整理，希望对后来的朋友也有所帮助。   <br />   	   <br />   	1、首先，上网找到POI的发布版本的源码，我下的是poi-src-2.5.1-final-20040804.zip这个版本。   <br />   	2、找到StringPtg.java这个文件，在解压后的\src\java\org\apache\poi\hssf\record\formula文件夹下面   <br />   	3、利用文本编辑工具对StringPtg.java进行编辑   <br />   	4、找到public   StringPtg(byte   []   data,   int   offset)这个方法，   <br />   	对其修改如下   <br />   /**   Create   a   StringPtg   from   a   byte   array   read   from   disk   */   <br />               public   StringPtg(byte   []   data,   int   offset)   <br />               {   <br />                           offset++;   <br />                           field_1_length   =   data[offset];   <br />                           field_2_options   =   data[offset+1];   <br />                           if   (fHighByte.isSet(field_2_options))   {   <br />                                       //   modified   by   rainsoft      <br />                                       //   in   excel   chinese   is   stored   two   bytes   HIGH   bytes,LOW   bytes   <br />                                       //   field_3_string=   StringUtil.getFromUnicode(data,offset+2,field_1_length);   <br />                                       field_3_string=   StringUtil.getFromUnicodeHigh(data,offset+2,field_1_length);   <br />                           }else   {   <br />                                       field_3_string=StringUtil.getFromCompressedUnicode(data,offset+2,field_1_length);   <br />                           }   <br />                                                         <br />                           //setValue(new   String(data,   offset+3,   data[offset+1]   +   256*data[offset+2]));   <br />               }   <br />   	其中主要利用getFromUnicodeHigh方法替换原有的方法进行处理。   <br />   	5、再查找StringPtg(String   value)，做如下的修改，   <br />      <br />   public   StringPtg(String   value)   {   <br />                           if   (value.length()   &gt;255)   {   <br />
                          throw   new  
IllegalArgumentException("String   literals   in   formulas   cant   be
  bigger   than   255   characters   ASCII");   <br />                           }   <br />                           this.field_2_options=0;   <br />                           //   add   by   rainsoft   <br />                           //   two   bytes   char   options   must   be   "1"                     <br />                           try   {   <br />                                 if   (value.length()!=value.getBytes("GBK").length)   <br />                                       this.field_2_options=1;   <br />                           }   catch   (Exception   e)   {   <br />                           }   <br />                           //   end   add   <br />                           this.fHighByte.setBoolean(field_2_options,   false);   <br />                           this.field_3_string=value;   <br />
                  this.field_1_length=(byte)value.length();   //for  
the   moment,   we   support   only   ASCII   strings   in   formulas  
we   create   <br />               }   <br />      <br />   	6、至此对源文件的修改就结束了，下一步则需要对其进行编译输出。   <br />   	7、利用docs/howtobuild.html的描述进行编译输出。   <br />   	8、成功编译输出的POI???????.jar文件，复制到原有的编译路径，替换到原有的文件即可，最好删除原有的   POI文件。  <br />http://topic.csdn.net/t/20060309/10/4602637.html<br /><img src ="http://www.blogjava.net/leekiang/aggbug/288896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2009-07-29 15:59 <a href="http://www.blogjava.net/leekiang/archive/2009/07/29/288896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用poi生成链接</title><link>http://www.blogjava.net/leekiang/archive/2008/10/21/235794.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Tue, 21 Oct 2008 14:11:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/10/21/235794.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/235794.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/10/21/235794.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/235794.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/235794.html</trackback:ping><description><![CDATA[1，<br />一个需求， 要求报表生成的Excel表格支持超链接。例如点击Excel内的公司名，
自动打开浏览器并连到该公司的网站上去。在Excel里面选中所需的单元格， 右键弹出属性，
选超链接就能输入相应的地址了，既然Excel支持超链接。那就没有什么借口说不能实现了。:).<br /><br />翻了翻POI的文档， 很容易就找到了解决方案。在POI中让单元格实现超链接功能， 可以用Hyperlink 函数。HYPERLINK函数包含两个参数，<font color="#0000ff">第一个参数是指向的地址，第二个参数是显示的字符串</font><br /><br />cell = row.createCell(colNumber)。<br />cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);<br />cell.setCellFormula("HYPERLINK(\"" + "Http://www.google.ca"+ "\",\"" + "Google Canada"+ "\")");<br /><font face="Arial"><font face="Arial">或cell.setCellFormula("<span class="hilite1">HYPERLINK</span>(\"[workbook.xls]'sheet2'!A1\",\"homepage\")"); </font></font>//HYPERLINK("#明细!A1","homepage"),#代表本工作簿，来源http://club.excelhome.net/thread-54081-1-1.html<br /><br />现在超链接单元格看起来和一般的单元格没有分别， 除非你把鼠标放上去才会变成手行光标。 为了和一般的习惯相符， 还需要把字符颜色变成蓝色和加上下划线。 这就要用到 style了、<br /><br />HSSFCellStyle linkStyle = workbook.createCellStyle();<br />HSSFFont cellFont= workbook.createFont();<br />cellFont.setUnderline((byte) 1);<br />cellFont.setColor(HSSFColor.BLUE.index);<br />linkStyle.setFont(cellFont);<br /><br />最后把style应用到cell上去就大功告成了。<br />cell.setCellStyle(linkStyle);<br /><br />以上修改自http://sunnylei2008.blogspot.com/2007/07/poihssf.html<br />和http://diystyle.javaeye.com/blog/132093<br />还有http://blog.csdn.net/xunyiren/archive/2007/03/08/1524533.aspx<br /><br />2，<br />以下来自http://www.javaeye.com/topic/25569,是用jxl解决的。<br />看了POI文档，找到一个LinkedDataFormulaField 和LinkedDataRecord，jxl文档里有 Hyperlink,现在想对一个excel中的一组sheet做一个索引，方便查找每张sheet,<br />String outputFile="D:/导出接口.xls";<br />try<br />{<br />Workbook wb=Workbook.getWorkbook(new File(outputFile)); //Excel获得文件<br />//打开一个文件的副本，并且指定数据写回到原文件<br />WritableWorkbook book=Workbook.createWorkbook(new File(outputFile),wb); <br />WritableSheet sheet=book.createSheet("导出目标",0); //添加一个工作表<br />String[] oriSheetNames=wb.getSheetNames();  //获得源excel文件中的所有sheet名称<br /> for(int i=0;i&lt;book.getNumberOfSheets();i++)<br /> {<br />    sheet.addCell(new Label(0,i+1,String.valueOf(i+1)));  //第一列写入编号<br />/**<br />* public WritableHyperlink(int col,int row,java.lang.String desc,WritableSheet sheet,int destcol,int destrow)<br />* Constructs a hyperlink to some cells within this workbook <br />* col - the column containing this hyperlink<br />* row - the row containing this hyperlink<br />* desc - the cell contents for this hyperlink<br />* sheet - the sheet containing the cells to be linked to<br />* destcol - the column number of the first destination linked cell<br />* destrow - the row number of the first destination linked cell<br />* */<br />sheet.addHyperlink(new WritableHyperlink(1,i+1,oriSheetNames[i],book.getSheet(oriSheetNames[i]),0,0));<br />book.write();<br />book.close();<br />wb.close();<br />}catch(IOException e)<br />{<br />    System.out.println("异常: "+e);<br />}<br />catch(BiffException e)<br />{<br />    System.out.println("异常: "+e);<br />}<br />catch(RowsExceededException e)<br />{<br />    System.out.println("异常: "+e);<br />}<br />catch(WriteException e)<br />{<br />    System.out.println("异常: "+e);<br />}<br /><br />3，公式里的乱码如何解决,来源:http://topic.csdn.net/t/20060309/10/4602637.html,作者阿水<br />前几天做项目的过程中，利用到Apache项目中的POI来实现基于Excel的数据模板输出，其中利用公式的方式嵌入超链接进行网页链接访问。   <br />
 
自己做了一些处理EXCEL单元格的方法，但在进行公式处理时，由于POI的问题，显示的公式信息一直都是乱码，后来在网上找到一些朋友关于这些问题的解
决方法，感觉帮助很大。因此，结合自己的实践经验，把修改POI内部源码的过程写出来，以其对资料做一整理，希望对后来的朋友也有所帮助。   <br />   	   <br />   	1、首先，上网找到POI的发布版本的源码，我下的是poi-src-2.5.1-final-20040804.zip这个版本。   <br />   	2、找到StringPtg.java这个文件，在解压后的\src\java\org\apache\poi\hssf\record\formula文件夹下面   <br />   	3、利用文本编辑工具对StringPtg.java进行编辑   <br />   	4、找到public   StringPtg(byte   []   data,   int   offset)这个方法，   <br />   	对其修改如下   <br />   /**   Create   a   StringPtg   from   a   byte   array   read   from   disk   */   <br />               public   StringPtg(byte   []   data,   int   offset)   <br />               {   <br />                           offset++;   <br />                           field_1_length   =   data[offset];   <br />                           field_2_options   =   data[offset+1];   <br />                           if   (fHighByte.isSet(field_2_options))   {   <br />                                       //   modified   by   rainsoft      <br />                                       //   in   excel   chinese   is   stored   two   bytes   HIGH   bytes,LOW   bytes   <br />                                       //   field_3_string=   StringUtil.getFromUnicode(data,offset+2,field_1_length);   <br />                                       field_3_string=   StringUtil.getFromUnicodeHigh(data,offset+2,field_1_length);   <br />                           }else   {   <br />                                       field_3_string=StringUtil.getFromCompressedUnicode(data,offset+2,field_1_length);   <br />                           }   <br />                                                         <br />                           //setValue(new   String(data,   offset+3,   data[offset+1]   +   256*data[offset+2]));   <br />               }   <br />   	其中主要利用getFromUnicodeHigh方法替换原有的方法进行处理。   <br />   	5、再查找StringPtg(String   value)，做如下的修改，   <br />      <br />   public   StringPtg(String   value)   {   <br />                           if   (value.length()   &gt;255)   {   <br />
                          throw   new  
IllegalArgumentException("String   literals   in   formulas   cant   be
  bigger   than   255   characters   ASCII");   <br />                           }   <br />                           this.field_2_options=0;   <br />                           //   add   by   rainsoft   <br />                           //   two   bytes   char   options   must   be   "1"                     <br />                           try   {   <br />                                 if   (value.length()!=value.getBytes("GBK").length)   <br />                                       this.field_2_options=1;   <br />                           }   catch   (Exception   e)   {   <br />                           }   <br />                           //   end   add   <br />                           this.fHighByte.setBoolean(field_2_options,   false);   <br />                           this.field_3_string=value;   <br />
                  this.field_1_length=(byte)value.length();   //for  
the   moment,   we   support   only   ASCII   strings   in   formulas  
we   create   <br />               }   <br />      <br />   	6、至此对源文件的修改就结束了，下一步则需要对其进行编译输出。   <br />   	7、利用docs/howtobuild.html的描述进行编译输出。   <br /><br /><font color="#0000ff">后注:按上面的办法,中文问题是解决了，但点击链接还是报"引用无效",观察了一会，原来是sheet名带有括号造成的。</font><br />  <br /><br /><img src ="http://www.blogjava.net/leekiang/aggbug/235794.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-10-21 22:11 <a href="http://www.blogjava.net/leekiang/archive/2008/10/21/235794.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>YAML格式解析</title><link>http://www.blogjava.net/leekiang/archive/2008/06/19/209249.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Thu, 19 Jun 2008 12:27:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/06/19/209249.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/209249.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/06/19/209249.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/209249.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/209249.html</trackback:ping><description><![CDATA[YAML是"Yet Another Markup Language(另一种标记语言)"的缩写，读音"yamel",或"雅梅尔"。这种格式大约是2001年出现的<br />写YAML要比XML快得多(无需关闭标签或引号)，并且比'.ini'文档功能更强(ini文档不支持层次)<br /><p>为什么不是XML呢？因为：</p><ul><li>YAML的可读性好。 
</li><li>YAML和脚本语言的交互性好。 
</li><li>YAML使用实现语言的数据类型。 
</li><li>YAML有一个一致的信息模型。 
</li><li>YAML易于实现。 </li></ul><p>上面5条也就是XML不足的地方。同时，YAML也有XML的下列优点：</p><p></p><ul><li>YAML可以基于流来处理； 
</li><li>YAML表达能力强，扩展性好。 </li></ul><p>总之，YAML试图用一种比XML更敏捷的方式，来完成XML所完成的任务。</p><p><a name="grammer"><span class="atitle">语法</span></a></p><p>Structure通过空格来展示。Sequence里的项用"-"来代表，Map里的键值对用":"分隔. </p><p>这几乎就是所有的语法了. 例子<br /></p><pre class="displaycode">name: John Smith
age: 37
spouse:
    name: Jane Smith
    age: 25
children:
    -   name: Jimmy Smith
        age: 15
    -   name: Jenny Smith
        age : 12</pre><p><br /></p>JYaml（<a href="http://jyaml.sourceforge.net/">http://jyaml.sourceforge.net/</a>）是YAML的Java实现。<br />YAML官方网站 http://www.yaml.org<br /><a href="http://www.ibm.com/developerworks/cn/xml/x-cn-yamlintro/">http://www.ibm.com/developerworks/cn/xml/x-cn-yamlintro/</a><br /><a href="http://www.sudu.cn/info/html/edu/php/20071219/114014.html">http://www.sudu.cn/info/html/edu/php/20071219/114014.html</a><br /><a href="http://www.javaeye.com/topic/205679">http://www.javaeye.com/topic/205679</a> （定义工作流,用ruby解析）<img src ="http://www.blogjava.net/leekiang/aggbug/209249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-06-19 20:27 <a href="http://www.blogjava.net/leekiang/archive/2008/06/19/209249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vCalendar(ics)，vCard格式及Outlook</title><link>http://www.blogjava.net/leekiang/archive/2008/04/03/190640.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Thu, 03 Apr 2008 08:15:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/04/03/190640.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/190640.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/04/03/190640.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/190640.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/190640.html</trackback:ping><description><![CDATA[http://hi.baidu.com/mn232nm/blog/item/aaa034adb50022094a36d620.html<br />http://hi.baidu.com/feige05/blog/item/3d7339184c8d9d0334fa4166.html<br /><a target="_blank" href="http://support.microsoft.com/kb/287625/zh-cn">http://support.microsoft.com/kb/287625/zh-cn</a><br /><a target="_blank" href="http://topic.csdn.net/u/20070426/13/3180348c-ef43-4725-ac97-d2b81e7af427.html"> 按vcalendar开发理论：用JAVA生成vcalendar代码，然后发邮件出去，当用outlook2003版本以上的MS   outlook收到该邮件时，可以把这个vcalendar加到outlook的calendar中去。</a><br /><a target="_blank" href="http://www.faqs.org/rfcs/rfc2445.html">.ics格式的RFC2445规范</a><br /><a target="_blank" href="http://www.ibm.com/developerworks/cn/xml/x-matters46/?ca=dwcn-newsletter-xml">XML 问题: 比微格式更轻巧：纤格式（Picoformat）</a><br /><a target="_blank" href="http://www.yeeyan.com/articles/view/3695/1259">iCalendar在移动设备</a><br /><img src ="http://www.blogjava.net/leekiang/aggbug/190640.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-04-03 16:15 <a href="http://www.blogjava.net/leekiang/archive/2008/04/03/190640.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>poi笔记</title><link>http://www.blogjava.net/leekiang/archive/2008/03/14/186391.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Fri, 14 Mar 2008 14:26:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/03/14/186391.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/186391.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/03/14/186391.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/186391.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/186391.html</trackback:ping><description><![CDATA[注意用poi解析器从word中抽取文本后，输入流会关闭，原因如下:<br />InputStreams passed to POIFSFileSystem are now automatically closed. A
warning is generated for people who might've relied on them not being
closed before, and a wrapper to restore the old behaviour is
supplied(POI-DEVELOPERS)<br />据说在POI3.0.3会修正该问题。<br /><br />1,poi格子里的文本如何换行<br />  加"\n",同时设置style.setWrapText(true);<br />  <br />2,style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);<br /> style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);<br /> 设置前景色,有半透明的效果<br /> <br />3，sheet.addMergedRegion(new Region(0, (short) 0, 0, (short) 1));// 起始cell行、起始cell列、结束cell行、结束cell列。<br />   被合并了的单元格不需要生成。<br />   单元格合并後设置边框只在原第一个上有效，如果想应用的合并後的整体，则需要一个个的Create出单元格并应用样式，这个明显是一个不太方便的操作，期待POI下一版的改进了<br />   注意行是y轴,列是x轴。<br />   poi-contrib下的HSSFRegionUtil可以设置合并区域的边框的颜色和样式<br />例如:HSSFRegionUtil.setLeftBorderColor(HSSFColor.BLACK.index,row,sheet,wb);<br /><br />4，sheet.createFreezePane(2, 1);<br />  冻结窗口,左上角为行参和列参的起始处，从0开始<br /> <br />5,列宽sheet.setColumnWidth((short) 0, (short) (35.7 * 110));//第一个参数为列的下标，110为想设置的宽度像素。<br />  http://www.cnblogs.com/interboy/archive/2007/08/27/872028.html<br /><br />6,行高row.setHeight((short) (15.625 * 100));//100为要设置的行高的像素<br />   row.setHeightInPoints((short)100);//应该可以达到同样的效果<br /><br />7, POI將註解的部分，視做一個文字方塊，我們可以設定它的大小及內容，然後將之指定給某特定的Cell。<br />节录部分Code如下：<br />HSSFPatriarch patr = sheet.createDrawingPatriarch();<br />HSSFComment comment = patr.createComment(new HSSFClientAnchor(0, 0, 0, 0, (short)4, 2, (short) 8, rowCount));<br />HSSFRichTextString str = new HSSFRichTextString("TEST");<br />comment.setString(str);<br />comment.setAuthor("TEST");<br />cell.setCellComment(comment);<br /><br />8，sheet的中文名<br />workbook.setSheetName(0,"统计",(short)1);//第三个参数为编码方式，HSSFWorkbook.ENCODING_UTF_16=1<br />sheet的名称不允许出现重复。<br /><br />9， 先定义一个基本样式，再复制样式的属性。不知何故不能clonebean<br />  HSSFCellStyle headerStyle = workbook.createCellStyle();<br />  PropertyUtils.copyProperties(headerStyle, baseStyle);//<br /><br />10, 输出，中文名<br />        response.reset();<br />        response.setContentType("applicationnd.ms-excel");<br />        response.addHeader("Content-disposition",<br />                "attachment;filename="+new String("统计".getBytes("GBK"), "ISO-8859-1")+".xls");<br />        ServletOutputStream out = response.getOutputStream();<br />        workbook.write(out);<br />        out.flush();<br />        out.close();<br /><br />11，cell.setCellValue(new HSSFRichTextString("测试"));<br />在poi2.5.1里不管用,只能用cell.setCellValue("测试");<br />忘了二者有何区别<br /><br />12，直接用workbook.getBytes()得到的文档内容的结构是有问题的,会导致打开xls时报错。<br />ByteArrayOutputStream bos = new ByteArrayOutputStream();<br />workBook.write(bos);<br />//ByteArrayInputStream is = new ByteArrayInputStream(workBook.getBytes());//错误<br />ByteArrayInputStream is = new ByteArrayInputStream(bos.toByteArray());//正确<br />详见 http://numenzq.javaeye.com/blog/218816<br /><br />13,POI的老版本的下载地址:http://archive.apache.org/dist/jakarta/poi/release/bin<br /><br />14,每个sheet有65536的最大行数限制?<br />   数据量非常大时，拆分为多个sheet(每个1万行)可显著降低内存占用。<br />   http://www.javaeye.com/topic/74835?page=3<br /><br />15,可用PropertyUtils.copyProperties(newStyle, baseStyle)把baseStyle的属性拷贝到newStyle中，但Font等拷贝不了。(浅拷贝,深拷贝?)<br /><br />16,POI如何复制行,<span id="zoom" class="a14c">设置分页符bug? </span><span id="zoom" class="a14c">见</span><a target="_blank" href="http://tech.ccidnet.com/art/322/20050908/328387_1.html">使用POI操作Excel的几点注意事项</a><br />和http://www.blogjava.net/liaojiyong/archive/2007/11/14/160588.html<br /><br />17,复制行，复制sheet<br />http://zhidao.baidu.com/question/66868683.html<br />http://www.aub.org.cn/J2SE/Article137612.html<br />http://zhidao.baidu.com/question/42447398.html<br /><br />18,用HSSFCell的getCellType()只能判断三种类型，返回值为int   0,1,2   <br />   numeric(0),   formula(2)   or   string(1)   <br />   但是仅仅依靠这个有时候不能完全解决问题，   <br />   有时候需要用HSSFDataFormat来共同判断：   <br />    cell.getCellStyle().getDataFormat()<br />见http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/BuiltinFormats.html<br />  https://svn.apache.org/repos/asf/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDateUtil.java<br /><br /><br />19，poi3.2把以下属性或方法删掉了：<br />HSSFWorkbook.ENCODING_UTF_16<br />cell.setEncoding<br />所以还是继续用poi3.0.2吧<br />        <br />http://blog.csdn.net/impeller/archive/2007/10/29/1855368.aspx<br /><a target="_blank" href="http://blog.csdn.net/seawavecau/archive/2007/04/19/1570928.aspx">解析Excel注释，填充并生成报表的一个例子</a><br />http://hi.baidu.com/bluewhale84/blog/item/b9ebd5c295911130e4dd3bd0.html<br />http://kevintuntun.bokee.com/2692649.html<br />http://www.ccw.com.cn/htm/center/prog/02_10_22_2.asp<br />http://llying.javaeye.com/blog/171455<br />http://hi.baidu.com/fish1996/blog/item/71412181e9825bdabd3e1eed.html(toutf8string)<br /><a target="_blank" href="http://linbzh.javaeye.com/blog/201502">poi的一个让人失望的bug</a><br /><br /><a target="_blank" href="http://www.openxml4j.org/">openxml4j</a>支持excel2007<br /><br /><br /><img src ="http://www.blogjava.net/leekiang/aggbug/186391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-03-14 22:26 <a href="http://www.blogjava.net/leekiang/archive/2008/03/14/186391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>备忘</title><link>http://www.blogjava.net/leekiang/archive/2008/02/26/182113.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Mon, 25 Feb 2008 20:44:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/02/26/182113.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/182113.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/02/26/182113.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/182113.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/182113.html</trackback:ping><description><![CDATA[
		<a target="_blank" href="http://hi.baidu.com/xingfupingguo/blog/item/3479882441e708024c088da8.html">有关《java抽取word,pdf的四种武器》的实验和总结</a>
		<br />
		<a target="_blank" href="http://csdncannon.bokee.com/991318.html">Java抽取Word，PDF的四种武器</a>
		<br />
		<a target="_blank" href="http://book.csdn.net/bookfiles/312/10031212845.shtml">使用poi来抽取excel文本</a>
		<br />
		<a target="_blank" href="http://pdfhome.hope.com.cn/Article.aspx?CID=bf51a5b6-78a5-4fa3-9310-16e04aee8c78&amp;AID=ec9e5450-4a7a-4b72-89fe-a4e06d04d5e6">用pdfbox解析pdf文件</a>
		<br />
		<a target="_blank" href="http://zjsoft.javaeye.com/blog/163247">poi</a>
		<br />
		<a target="_blank" href="http://zjsoft.javaeye.com/blog/130801">spring集成的Hibernate一窥</a>
		<br />
		<a target="_blank" href="http://zjsoft.javaeye.com/blog/143431">使用sqlquery</a>
		<br />
		<a target="_blank" href="http://www.zxbc.cn/html/javajq/0814083294452.html">全文检索Lucene的实现方法</a>
		<br />
		<br />Ganttproject可以用来生成甘特图<br />
文本比较http://www.incava.org/projects/java/java-diff/<img src ="http://www.blogjava.net/leekiang/aggbug/182113.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-02-26 04:44 <a href="http://www.blogjava.net/leekiang/archive/2008/02/26/182113.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>html的解析以及nekohtml的使用</title><link>http://www.blogjava.net/leekiang/archive/2008/02/21/181163.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Thu, 21 Feb 2008 10:29:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/02/21/181163.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/181163.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/02/21/181163.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/181163.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/181163.html</trackback:ping><description><![CDATA[
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
				<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
				<span style="color: rgb(0, 0, 255);">    import</span>
				<span style="color: rgb(0, 0, 0);"> org.cyberneko.html.parsers.DOMFragmentParser;<br />     import org.apache.html.dom.HTMLDocumentImpl;<br />    </span>
				<span style="color: rgb(0, 0, 255);">import</span>
				<span style="color: rgb(0, 0, 0);"> org.w3c.dom.DocumentFragment;<br />    </span>
				<span style="color: rgb(0, 0, 255);">import</span>
				<span style="color: rgb(0, 0, 0);"> org.w3c.dom.Node;<br />    </span>
				<span style="color: rgb(0, 0, 255);">import</span>
				<span style="color: rgb(0, 0, 0);"> org.w3c.dom.NodeList;<br />    </span>
				<span style="color: rgb(0, 0, 255);">import</span>
				<span style="color: rgb(0, 0, 0);"> org.xml.sax.InputSource;<br />    </span>
				<span style="color: rgb(0, 0, 255);">import</span>
				<span style="color: rgb(0, 0, 0);"> org.xml.sax.SAXException;<br /><br />    </span>
				<span style="color: rgb(0, 128, 0);">/**</span>
				<span style="color: rgb(0, 128, 0);">
						<br />     * 从html中抽取纯文本<br />     * <br />     * </span>
				<span style="color: rgb(128, 128, 128);">@param</span>
				<span style="color: rgb(0, 128, 0);"> content<br />     * </span>
				<span style="color: rgb(128, 128, 128);">@return</span>
				<span style="color: rgb(0, 128, 0);">
						<br />     * </span>
				<span style="color: rgb(128, 128, 128);">@throws</span>
				<span style="color: rgb(0, 128, 0);"> UnsupportedEncodingException<br />     </span>
				<span style="color: rgb(0, 128, 0);">*/</span>
				<span style="color: rgb(0, 0, 0);">
						<br />    </span>
				<span style="color: rgb(0, 0, 255);">public</span>
				<span style="color: rgb(0, 0, 0);"> String extractTextFromHTML(String content)<br />            </span>
				<span style="color: rgb(0, 0, 255);">throws</span>
				<span style="color: rgb(0, 0, 0);"> UnsupportedEncodingException {<br />        DOMFragmentParser parser </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">new</span>
				<span style="color: rgb(0, 0, 0);"> DOMFragmentParser();<br />        DocumentFragment node </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">new</span>
				<span style="color: rgb(0, 0, 0);"> HTMLDocumentImpl().createDocumentFragment();<br />        InputStream is </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">new</span>
				<span style="color: rgb(0, 0, 0);"> ByteArrayInputStream(content.getBytes());<br />        </span>
				<span style="color: rgb(0, 0, 255);">try</span>
				<span style="color: rgb(0, 0, 0);"> {<br />            parser.parse(</span>
				<span style="color: rgb(0, 0, 255);">new</span>
				<span style="color: rgb(0, 0, 0);"> InputSource(is), node);<br />        } </span>
				<span style="color: rgb(0, 0, 255);">catch</span>
				<span style="color: rgb(0, 0, 0);"> (IOException e) {<br />            e.printStackTrace();<br />        } </span>
				<span style="color: rgb(0, 0, 255);">catch</span>
				<span style="color: rgb(0, 0, 0);"> (SAXException se) {<br />            se.printStackTrace();<br />        }<br /><br />        StringBuffer newContent </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">new</span>
				<span style="color: rgb(0, 0, 0);"> StringBuffer();<br />        </span>
				<span style="color: rgb(0, 0, 255);">this</span>
				<span style="color: rgb(0, 0, 0);">.getText(newContent, node);<br /><br />        String str </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> (</span>
				<span style="color: rgb(0, 0, 255);">new</span>
				<span style="color: rgb(0, 0, 0);"> String(<br />                newContent.toString().getBytes(</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">Windows-1252</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">), </span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">GBK</span>
				<span style="color: rgb(0, 0, 0);">"</span>
				<span style="color: rgb(0, 0, 0);">));<br />        </span>
				<span style="color: rgb(0, 0, 255);">return</span>
				<span style="color: rgb(0, 0, 0);"> str;<br />    }<br /><br />    </span>
				<span style="color: rgb(0, 0, 255);">private</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">void</span>
				<span style="color: rgb(0, 0, 0);"> getText(StringBuffer sb, Node node) {<br />        </span>
				<span style="color: rgb(0, 0, 255);">if</span>
				<span style="color: rgb(0, 0, 0);"> (node.getNodeType() </span>
				<span style="color: rgb(0, 0, 0);">==</span>
				<span style="color: rgb(0, 0, 0);"> Node.TEXT_NODE) {<br />            sb.append(node.getNodeValue());<br />        }<br />        NodeList children </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> node.getChildNodes();<br />        </span>
				<span style="color: rgb(0, 0, 255);">if</span>
				<span style="color: rgb(0, 0, 0);"> (children </span>
				<span style="color: rgb(0, 0, 0);">!=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">null</span>
				<span style="color: rgb(0, 0, 0);">) {<br />            </span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> len </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> children.getLength();<br />            </span>
				<span style="color: rgb(0, 0, 255);">for</span>
				<span style="color: rgb(0, 0, 0);"> (</span>
				<span style="color: rgb(0, 0, 255);">int</span>
				<span style="color: rgb(0, 0, 0);"> i </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 0);">0</span>
				<span style="color: rgb(0, 0, 0);">; i </span>
				<span style="color: rgb(0, 0, 0);">&lt;</span>
				<span style="color: rgb(0, 0, 0);"> len; i</span>
				<span style="color: rgb(0, 0, 0);">++</span>
				<span style="color: rgb(0, 0, 0);">) {<br />                getText(sb, children.item(i));<br />            }<br />        }<br />    }</span>
		</div>
		<br />1，nekohtml1.9.6.1版本用到了jdk5的Arrays.hashCode等方法，为兼容jdk1.4,<br />  故采用nekohtml1.9.6版本<br />2，需要xerces.jar支持<br />3，<br />   http://hi.baidu.com/walkandsing/blog/item/f5743634c6ba2e3a5bb5f5e5.html<br />   http://blog.csdn.net/zhou2002/archive/2008/01/19/2053911.aspx<br />   http://playfish.javaeye.com/blog/150184<br /><br />4,<br />python解析html<br />http://lenciel.cn/docs/python-parser-of-xml/<br />http://hi.baidu.com/javalang/blog/item/84bac4bf731fb80f18d81fe1.html<br />ruby用hpricot<br /><br /><img src ="http://www.blogjava.net/leekiang/aggbug/181163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-02-21 18:29 <a href="http://www.blogjava.net/leekiang/archive/2008/02/21/181163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>