当前位置:首页 > 开发 > 开源软件 > 正文

Jivan 介绍

发表于: 2005-02-21   作者:buaawhl   来源:转载   浏览次数:
摘要: 引用 我在一篇文章《Web页面技术综述》中 http://blog.csdn.net/buaawhl/archive/2004/07/07/36326.aspx 提到了一种思路 2.6.DOM + XPath 前面讲了XMLC把HTML静态编译成DOM结构。 我们也可以采用动态生成DOM结构的方法,然后用XPath定位DOM结点并操作它们。 NekoHTML(http
引用

我在一篇文章《Web页面技术综述》中
http://blog.csdn.net/buaawhl/archive/2004/07/07/36326.aspx
提到了一种思路

2.6.DOM + XPath
前面讲了XMLC把HTML静态编译成DOM结构。

我们也可以采用动态生成DOM结构的方法,然后用XPath定位DOM结点并操作它们。

NekoHTML(http://www.apache.org/~andyc/neko/doc/html/)是一个HTML文档解析工具。

NekoHTML使用Apache Xerces(http://xml.apache.org/xerces2-j/index.html)的Xerces Native Interface对HTML文档进行解析,能够自动补足并修正不符合XML文法的HTML元素,并生成HTML DOM文档树。

Apache Xcerse的XPathAPI,可以用XPath方便地定位DOM结构的结点。DOM + XPath的详细用法请参见NekoHTML的使用文档。


优点:
大致具有上述XMLC方法的优点。
没有静态编译过程,动态生成DOM结构,及时反映页面文件的变化。

缺点:
大致具有上述XMLC方法的缺点。

DOM结构的动态生成比较花时间。我们可以采用这样的方法解决这个问题,把第一个生成的DOM结构作为标准模板。我们不对标准模板操作,每次请求需要一个DOM结构的时候,我们就从这个标准模板深度拷贝(deep copy)一个新的DOM结构,然后使用这个新的DOM结构。这样每个HTML文件只需要解析一次,成为标准模板。每次HTML文件更改的时候(这种情况很少),标准模板也跟着更新。

XPath的解析和定位速度不是很快,几乎每次都要遍历整个文档树。


http://www.jivan.org
后来发现,Jivan 就是这样的项目。思路就是采用 NekoHTML解析HTML文件,生成一个HTML DOM,然后操作DOM Node。而且确实采用了 DOM 深度Copy的方式获取一个新的DOM,避免重复解析同一个HTML。

Template技术主要分为两种:
1. 主动脚本 -- JSP, Velocity, Freemarker, Tapestry.
2. 被动资源 -- Jivan, JDynamiTe, fastm
(还有一种就没有Template了,直接就是Java Code HTML Generater, 比如,Echo, Wicket等。)

被动资源类别(Jivan, JDynamiTe, fastm),非常适合CMS, Portal等的 动态编辑定义布局功能。
其中的Jivan 模板是最干净的,一点杂质都没有。只要用 html tag 本身的 id (甚至其他任何属性,不用属性也可以,直接用xpath) 就可以。
JDynamiTe 和 fastm 还要用 XML Comment 和 {}。
而Tapestry则需要引入新的 jwcid 等属性。

在操作 HTML 资源方面,Jivan 也是最灵活强大的,能够改变、添加、删除任何一个HTML Node。
但是这里又有一个问题。不属于XML Node的部分,比如,Javascript 中的某部分语句需要动态生成,Jivan就无能为力了。当然,这种情况比较少见,即使有,也可以采用一些方法绕过去。

下面来看 Jivan 的 HelloWorld。
HTML部分。

<font face="Arial">
Push your dynamic content into the HTML! Time is <span id=time>illusion</span>
</font>



Java Code部分。
public static void main(String[] args) throws IOException {
// load document
DocumentManager man = DocumentFactory.getInstance()
			.docManFor("file:data\\html\\HelloWorld.html");
// push dynamic content into tree.
Node timeSpan = man.lookup("time");
DOMUtil.setTextChild(timeSpan, new Date().toString());
		
// write HTML output to stdout
man.serialize(System.out);

}


我们看到,这段代码用 id = time 来寻找Node (是一个Span Element),  并设置 text。其实也可以用 xpath来直接定位。
理论上,这个HTML 里面的任何一个Node都可以被修改替换。

Jivan 介绍

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Datazen是移动端全平台的图表解决方案,基于HTML5的应用,实现了全平台的整合。此篇主要对其功能进
一、NQSQL概述 1.1 什么是NOSQL 首先需要说的是,NoSql并不表示NO SQL"没有SQL"的意思。实际上,它
多进程:在操作系统中能(同时)运行多个任务(程序) 多线程:在同一应用程序中有多个顺序流(同时
代码生成器作用 中国有句古语叫做“工欲善其事,必先利其器”,用通俗的话来说就是“磨刀不误砍柴功
WCM(Web Content Management,网站内容管理)是针对大型门户网站的搭建和运行管理而发展起来的一类
PageMethods介绍 原文地址:http://metasapiens.com/PageMethods/intro.aspx 在简单的 HTML 页面和
软件下载: http://www.cygwin.com/setup.exe Cygwin使用指南 根据cygwin user guide翻译整理,希望
本文主要对WebView进行介绍,包括webView 4个可以定制的点、设置WebView back键响应、控制网页的链
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号