存档

文章标签 ‘html’

用JTidy转换html为xml

2005年8月2日 robertbao 1 条评论

最近工作中要从网页提取信息,打算先把html转换成标准的xml格式,然后方便使用dom4j进行后续的解析,试用了不少现成的类库,JTidy、NekoHTML、HTML Parser、Jericho,最后还是使用了JTidy。

只是r8 snapshot还只是一个nightly builds,前面的r7版更已经是4年前的事了,这个项目就这样荒废了?可能是参与的人太少又或者是觉得已经成熟?

JTidy提供了一个语法检查器和标签补偿器,能够对各种乱七八糟的html进行修复,使之符合xhtml标准。

r8 snapshot相对于r7改变了一些参数的设置方法,特别是在字符编码处理上,用setInputEncoding和setOutputEncoding方法来确定输入和输出文件的字符编码,可以使用任何有效的Java编码名称,这就比以前的强多了。

总体上解析的结果还不错,只是有些地方还需要对生成文件进行手工调整,或者自己再编一段代码处理一下,已经不是大问题了。

一些常用的参数设置:

setAltText(java.lang.String altText) 
加上默认的alt属性值
setBreakBeforeBR(boolean breakBeforeBR)
在换行<br />之前加一空行
setCharEncoding(int charencoding)
已废弃
setConfigurationFromFile(java.lang.String filename)
从文件中读取配置信息
setConfigurationFromProps(java.util.Properties props)
从properties中读取配置信息
setErrfile(java.lang.String errfile)
错误输出文件
setFixBackslash(boolean fixBackslash)
URL中用/取代\
setForceOutput(boolean forceOutput)
不管生成的xml是否有错,强制输出。
setHideComments(boolean hideComments) 
结果中不生成注释
setInputEncoding(java.lang.String encoding)
输入编码
setLogicalEmphasis(boolean logicalEmphasis)
用em替代i,strong替代b
setMessageListener(TidyMessageListener listener)
加入一个TidyMessageListener监听器
setOnlyErrors(boolean onlyErrors) 
只输出错误文件
setOutputEncoding(java.lang.String encoding) 
输出编码
setPrintBodyOnly(boolean bodyOnly) 
只输出body中的部分
setRepeatedAttributes(int repeatedAttributes) 
重复属性的处理
setSpaces(int spaces) 
每行前的空格数,就是缩进格式
setTidyMark(boolean tidyMark) 
是否生成tidy标记
setTrimEmptyElements(boolean trimEmpty) 
不输出空元素
setUpperCaseAttrs(boolean upperCaseAttrs) 
属性变大写
setUpperCaseTags(boolean upperCaseTags) 
标记变大写
setWraplen(int wraplen) 
多长换行
setXHTML(boolean xhtml) 
输出xhtml
setXmlOut(boolean xmlOut)
输出xml
setXmlPi(boolean xmlPi) 
文件头输出xml标记
setXmlSpace(boolean xmlSpace)
加入xml名字空间属性

使用方法极为easy,定义输入输出流,用tidy.parse()转换就行了:

BufferedInputStream in;

FileOutputStream out;

Tidy tidy = new Tidy();

tidy.setConfigurationFromFile(configFileName);//配置文件,写入上面的设置参数

try {

in = new BufferedInputStream(new FileInputStream(srcFileName));

out = new FileOutputStream(outFileName);

tidy.parse(in, out);

} catch (IOException e) {

System.out.println(e);

}
 

分类: WORK 标签: , , ,

圆角矩形的css表示

2005年6月20日 robertbao 3 条评论

1、圆角矩形的代码段,方法用的比较巧妙,就是用5张不同的图片作背景来表示出这种效果。

2、css代码:

/* 后四张图片四分之一圆内部用第一张图片的颜色,外部用包含这个矩形的背景颜色 */
.rbroundbox { background: url(nt.gif) repeat; }/* 矩形内容背景图片*/
.rbtop div { background: url(tl.gif) no-repeat top left; }/* 左上角图片 */
.rbtop { background: url(tr.gif) no-repeat top right; }/* 右上角图片 */
.rbbot div { background: url(bl.gif) no-repeat bottom left; }/* 左下角图片 */
.rbbot { background: url(br.gif) no-repeat bottom right; }/* 右下角图片*/

.rbtop div, .rbtop, .rbbot div, .rbbot {
width: 100%;
height: 7px;
font-size: 1px;
}
.rbcontent { margin: 0 7px; }
.rbroundbox { width: 50%; margin: 1em auto; }

3、html代码:

<div class="rbroundbox">
<div class="rbtop"><div></div></div>
<div class="rbcontent">
<p>马英九表示,他对当局护渔的一贯态度,就是当局表现不佳,让日本欺负我们渔民,太不象话,他曾经多次表达强烈反对。他说,在野党只能呼吁,我们的态度应该是“扩大护渔、不惜一战、以战逼和”,让日本愿意上谈判桌,划出渔区做出承诺,要真的拿出办法才行,否则相同的情况会一再重演。</p>
</div><!– /rbcontent –>
<div class="rbbot"><div></div></div>
</div><!– /rbroundbox –>

4、本站css暂未加入这个,所以暂时还看不到效果。

分类: WORK 标签: ,

显示图片渐隐效果

2004年2月26日 robertbao 1 条评论

用下面的代码可以在网页中显示图片渐隐效果(IE中有效):

1.Script代码:

<SCRIPT>
nereidFadeObjects = new Object();
nereidFadeTimers = new Object();
function nereidFade(object, destOp, rate, delta){
if (!document.all)
return
  if (object != "[object]"){ 
      setTimeout("nereidFade("+object+","+destOp+","+rate+","+delta+")",0);
      return;
  }
     
  clearTimeout(nereidFadeTimers[object.sourceIndex]);
 
  diff = destOp-object.filters.alpha.opacity;
  direction = 1;
  if (object.filters.alpha.opacity > destOp){
      direction = -1;
  }
  delta=Math.min(direction*diff,delta);
  object.filters.alpha.opacity+=direction*delta;

  if (object.filters.alpha.opacity != destOp){
      nereidFadeObjects[object.sourceIndex]=object;
      nereidFadeTimers[object.sourceIndex]=setTimeout("nereidFade(nereidFadeObjects["+object.sourceIndex+"],"+destOp+","+rate+","+delta+")",rate);
  }
}
</SCRIPT>

2.html代码:

<img src="http://www.google.com/images/logo_sm.gif" id="logo" border=0 style="FILTER: alpha(opacity=50)" onMouseOver=nereidFade(this,100,40,5) onMouseOut=nereidFade(this,30,40,5)>

3.可以自己测试一下效果,我这里就不显示了。

分类: WORK 标签: ,