Google

星期四, 五月 14, 2009

Web应用本地化 Mozilla发布Prism正式版[转]

Mozilla“Web应用程序本地化”服务Prism终于发布了1.0正式版,周五,公司在Prism独立网站提供了Prism 1.0的下载以及升级后的API。

Prism 1.0拥有任务栏图标、程序设置、自动升级等功能,和Firefox一样,你也可以清楚诸如用户名、密码、浏览历史之类的隐私数据。Prism有可能作为插件出现在下一代Firefox中,因为Chrome中已经有类似的功能了。

Prism基于Firefox核心,并支持目前大多数的互联网技术。Prism并没有企图代替Web应用程序而建立一个全新的Web-桌面平台,它仅提供 了一个自适应映射服务,将Web服务映射到桌面形成一个应用程序。任何可以在浏览器中运行的Web应用服务都可以在Prism中执行。

如果你需要一个类似桌面Gmail客户端的程序,你仅需要通过Prism把Gmail映射成应用程序,而实际上的运行结果是通过访问Web来实现的。 Prism通过自适应调节Gmail的窗体大小,把一个类似应用程序的桌面快捷方式放置在你的桌面上,你每次仅需点击桌面的快捷方式即可访问 Gmail了。

Prism 1.0官方下载:http://prism.mozilla.com/

Mozilla Lab的离线Web程序项目Prism正式发布了1.0 Beta。Prism模糊了桌面和Web的界线,允许你和普通桌面程序一样离线使用Web网站,它支持Linux、Mac OS X和Windows。beta版增加了一些新特性:

新API;设置字体和设置代理服务器,和其它特定的应用程序设置;能按要求清除隐私数据;自动更新Prism;系统托盘图标支持,以及系统托盘子菜单;完整支持OS X 10.4;支持SLL例外。  

注:这个关注了很久。因为特别喜欢XUL。songbird虽不成熟,但是可以使人看到成果。
来源:http://linux.chinaunix.net/news/2009/05/13/1111013.shtml

标签: , , , ,

星期三, 五月 14, 2008

25个顶级PHP模板引擎

为了找到一个好的模板引擎,我在互联网上进行搜索,目前已经整理出了以下名单:

Smarty
Smarty的特点是将模板编译成PHP脚本,然后执行这些脚本。很快,非常灵活。

Heyes Template Class
一个非常容易使用,但功能强大并且快速的模板引擎,它帮助你把页面布局和设计从代码中分离。

FastTemplate
一个简单的变量插值模板类,它分析你的模板,把变量的值从HTML代码中分离处理。

ShellPage
一个简单易用的类,可以让你的整个网站布局基于模板文件,修改模板就能改变整个站点。

STP Simple Template Parser
一个简单、轻量级并且易于使用的模板分析类。它可以从多个模板中组装一个页面,把结果页面输出到浏览器或者文件系统。

OO Template Class
一个你可以用在自己程序中的面向兑现的模板类。

SimpleTemplate
一个可以创建和结构化网站的模板引擎。它可以解析和编译模板。

bTemplate
短小但是快速的模板类,允许你把PHP逻辑代码从HTML修饰代码中分离。

Savant
一个强大且轻量级的PEAR兼容模板系统。它是非编译型的,使用PHP语言本身做为它的模板语言。

ETS - easy template system
可以使用完全相同数据重组模板的模板系统。

EasyTemplatePHP
适用于你的站点的一个简单但是强大的模板系统。

vlibTemplate
一个快速、全能的模板系统,它包含一个缓存和调试类。

AvanTemplate
多字节安全的模板引擎,占用很少系统资源。它支持变量替换,内容块可以设置显示或隐藏。

Grafx Software’s Fast Template
一个修改版本的Fast Template系统,它包括缓存功能,调试控制台以及沉默去除为赋值块。

TemplatePower
一个快速、简单、功能强大的模板类。主要功能有嵌套的动态块支持,块/文件包含支持以及显示/隐藏未赋值的变量。

TagTemplate
这个库的功能被设计来使用模板文件,同时允许你从HTML文件检索信息。

htmltmpl: templating engine
一个适用于Python和PHP的模板引擎。它面向希望在项目中分离代码和设计的web应用开发人员。

PHP Class for Parsing Dreamweaver templates
一个分析Dreamweaver模板的简单类,被用于Gallery 2 和WordPress的自定义模块中。

MiniTemplator (Template Engine)
针对HTML文件的一个紧凑型模板引擎。对于模板变量和块定义它具有简单的语法。其中块可以嵌套。

Layout Solution
简化网站开发和维护。它拥有常用的变量和页面元素使你不需要重复做页面布局工作。

Cached Fast Template
它已经纳入 FastTemplate ,允许你缓存模板文件,甚至可以在分离的块内容上缓存不同的规格。

TinyButStrong
一个支持MySQL, Odbc, Sql-Server和ADODB的模板引擎。它包含7个方法和两个属性。

Brian Lozier’s php based template engine
只有2K大小,非常快并且是面向对象设计。

WACT
一个从设计中分离代码的模板引擎。

PHPTAL
一个PHP下面的XML/XHTML模板库。

http://www.yeeyan.com/articles/view/2930/1993

标签: , , , , , , ,

星期三, 四月 16, 2008

TinyXML与wxWidgets

TinyXML 是一個小巧的 C++ XML parser Library,十分容易就可以整合到你的程式,而且學習曲線十分的短。

TiXmlNode

TinyXML 使用 node 的觀念來看待 XML 文件樹,TiXmlNode 就是代表著一個節點的 class。

Load and Save

TinyXML 使用 TiXmlDocument 這個 class 來載入/儲存 xml file。A document binds together all the XML pieces. It can be saved, loaded, and printed to the screen.

TiXmlDocument doc;doc.Load( "myfile.xml" );

存取的時候,要先取得下一層的 Child Element:

TiXmlElement* element = doc.FirstChildElement();

也可以指定標籤來取得特定的 Element,如同下面的例子:

TiXmlElement* element = doc.FirstChildElement("Node");

TiXmlElement

The element is a container class. It has a value, the element name, and can contain other elements, text, comments, and unknowns. Elements also contain an arbitrary number of attributes.
<foo>This is textfoo>

例如上面的片斷,我們可以使用 GetText() 取得被包起來的文字:
const char* str = fooElement->GetText();

TinyXML and wxWidgets

TinyXML 預設以 UTF-8 編碼,wxWidgets 編譯成 Unicode mode 時,傳入的參數需要轉碼,wxString 可以使用 mb_str() 轉碼,就可以與 TinyXML一起使用。

如果要轉換 UTF-8 char * 字串為 wxString,使用下列的方式:

const char* str = fooElement->GetText();wxString myString(str, wxConvUTF8);
http://www.cppblog.com/tx7do/archive/2006/04/24/6153.html

标签: , ,

星期二, 四月 08, 2008

http://www.xml4wx.org/

XML for wxWidgets is an open source XML parser writen in C++ for use with the wxWidgets cross platform GUI toolkit. This is not the same classes/library included with wxWidgets, but a complete re-write.
  • Designed to be as reasonably standards compliant as possible
  • Includes DOM 1.0, XPath 1.0, XSLT 1.0 and SAX-like implementation
  • Many convienience functions for common functionality makes it easy to use
  • Completely embedable - link your project with the static library
  • Inheritable class structure allows creation of special-use DOM's
  • Easily extendable XPath and XSLT functions so that you can implement the functions you need
  • The open source, relativly simple design makes it easy to solve issues while developing

The biggest feature is that it is a piece of cake to work with an in memory XML Document from your C++ code. Instead of having to write specialized C++ classes/structures to represent your xml, you can simply use the iDOMDocument as-is. You can think of the XML4WX DOM as a giant Hash table that also has a stateless search and reporting engines built in.

Other XML DOMS (xmllib2, Xerces, MS XML) require you to write large ammounts of C++ code to access the data. If your xml changes, you'll have to re-write the container classes and re-compile your application. With XML4WX, if you write your XPath queries carefully, your C++ code will continue to work.

标签: , ,

星期四, 三月 20, 2008

收集了些有用的网址,今天要用

http://gql.sourceforge.net/
Database Template Library --> https://sourceforge.net/project/showfiles.php?group_id=17082
--> http://www.codeguru.com/cpp/data/mfc_database/dynamicdataaccess/article.php/c10629/
RudeDatabase --> http://www.rudeserver.com/database/download.html
Free Database or libraries --> http://www.thefreecountry.com/sourcecode/database.shtml
XML Library --> http://xerces.apache.org/xerces-c/
--> http://www.alphaworks.ibm.com/tech/xml4c XML4C --> xerces-c
Expat --> http://www.jclark.com/xml/expat.html
DB Access Library --> http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Relational_Database_Access

标签: , , ,

星期五, 四月 13, 2007

使用 LibXML2 处理配置文件

级别: 中级
David Dougall (david.dougall@gmail.com), 自由撰稿人
Nicholas Chase (ibmquestions@nicholaschase.com) Backstop Media

2006 年 6 月 19 日
学习如何在您的 UNIX® 应用程序中使用 XML(可扩展标记语言)。本文面向那些不熟悉 XML 的 UNIX 开发人员,研究了 Gnome 项目中开发的 XML 库。在从总体上对 XML 进行简单的解释之后,您将看到 UNIX 应用程序开发人员可能用来解析和管理 XML 格式的配置文件的示例代码,其中使用了 LibXML2 库。

引言

要创建完善的、高度互操作性的应用程序,XML 是一个很好的选择,因为它正越来越广泛地应用于数据存储和配置文件管理。本文研究了一个使用 XML(可扩展标记语言)作为其配置文件格式的示例应用程序,并通过该示例向您介绍如何在自己的 UNIX 应用程序中使用 XML。该示例应用程序使用 Perl 编写,并且其中使用了基于 Gnome 项目的 LibXML2 库的 Perl 模块。

在给出 XML 的简单定义之后,本文介绍了一个使用 XML 编写的示例配置文件。然后,通过示例代码来介绍如何解析这个配置文件。系统管理员可以手动修改该配置文件,但通常在一定程度上,需要应用程序直接地修改该 配置文件。然后,本文通过一个示例介绍如何以编程的方式向这个 XML 文档添加新的配置选项,以及如何修改当前条目的值。最后,本文介绍了将这个经过修改的配置文件写入到磁盘的代码。

详细内容见:IBM developerWorks

标签: , ,

启用 XML 安全性

XML 加密和 XML 签名简介
级别: 初级 Murdoch Mactaggart (IBMDev@TextBiz.com), 自由撰稿作家
2001 年 9 月 01 日

XML 是因特网以及近来 Web 服务持续增长和开发的主要支持者。但是,在实现 XML 语言的全部能力之前,还有许多与安全性相关的工作要做。目前,加密整个 XML 文档、测试其完整性和确认其发送方的可靠性是一个简单的过程。但是,越来越有必要对文档的某些部分也使用这些功能,以便以任意顺序加密和认证以及涉及不同 用户或发起方。目前,在与 XML 相关的安全性领域方面开发规范的最重要部分是 XML 加密、XML 签名、XACL、SAML 和 XKMS。本文介绍前两个。

简介

XML 已经成为一种用于在因特网上交换数据的有价值机制。SOAP,这种发送 XML 消息的方式,促使进程以一种前所未有的方式相互通信,而 UDDI 看起来正在快速成为整合 Web 服务的供应商和用户的标准;服务本身是 XML 以 WSDL (即“Web 服务描述语言”)形式描述的。如果没有 XML,将不可能有这种灵活性和能力,并且,正如许多人所说的,将有必要发明元语言。

安全性领域是另一个快速增长的领域。在不同团体之间建立信任的传统方法在公共因特网上已不合适,实际上,在大型 LAN 和 WAN 上也不合适。在这些情况下,基于非对称密码术的信任机制可能会非常有用,但实际上,部署和密钥管理的方便性、互操作性的范围和提供的安全性远不如各种的“公钥基础设施”(Public Key Infrastructures (PKI))的热情的供应商曾让我们相信的那样。处理层次数据结构,以及带有机密、访问权限或完整性等不同需求的数据的子集特别困难。另外,具有不同于 XML 文档的现今标准安全性控制的应用程序一点都不简单。

目前,一些团体正积极投身于检查这些问题和开发标准的活动中。其中主要的相关开发是 XML 加密和相关的 XML 签名、“可扩展访问控制语言(XACL)”和相关的“安全性断言标记语言(SAML ― 以前是互为竞争对手的 AuthML 和 S2ML 的结合)”。所有这些都由 OASIS 和“XML 密钥管理规范(XKMS)”驱动。本文将 介绍 XML 加密和 XML 签名。

“XML 安全性套件”

部分原因是由于这些标准仍处于发展阶段,因此,开发人员可用的工具集和库的数量仍然有限,但十分确信的一点是,这正在开始发生变化。IBM 已经向“Java 社区过程(JCP)”提交了两种相关的“Java 规范请求(JSR)”。它们是 JSR-105、“XML 数字签名 API”和 JSR-106、“数字加密 API”。

“IBM 东京研究实验室”在 1999 年开发了“XML 安全性套件”作为 XML 签名的原型实现。它包含一些自动生成 XML 数字签名、实现 W3C 的“规范”XML 工作草案,以及通过 XML 加密的实验性实现来提供元素级加密的实用程序。它还提供一种在应用到 XML 文档时处理安全性特定要求的方式。还引入了“可扩展访问控制语言(XACL)”的 XML 模式定义。

developerWorks 有一篇 Doug Tidwell 著的文章详细讲述了该套件,可在 alphaWorks 站点获得该套件的最新版本。(请参阅 参考资料。)


XML 加密和 XML 签名

象 其它任何文档一样,可以将 XML 文档整篇加密,然后安全地发送给一个或多个接收方。例如,这是 SSL 或 TLS 的常见功能,但是更令人感兴趣的是如何对同一文档的不同部分进行不同处理的情况。XML 的一个有价值的好处是可以将一整篇 XML作为一个操作发送,然后在本地保存,从而减少了网络通信量。但是,这就带来了一个问题:如何控制对不同元素组的授权查看。商家可能需要知道客户的名 称和地址,但是,无需知道任何正在使用的信用卡的各种详细信息,就像银行不需要知道购买货物的详细信息一样。可能需要防止研究人员看到有关个人医疗记录的 详细信息,而管理人员可能正好需要那些详细信息,但是应该防止他们查看医疗历史;而医生或护士可能需要医疗详细信息和一些(但不是全部)个人资料。

密码术现在所做的远远不止隐藏信息。消息摘要确定文本完整性,数字签名支持发送方认证,相关的机制用于确保任何一方日后无法拒绝有效事务。这些都是远程交易必不可少的元素,现在,用于处理整个文档的机制开发得相当好。

有 了一般的加密,对 XML 文档整体进行数字化签名不是问题。然而,当需要对文档的不同部分(可能由不同的人)签名,以及需要与选择性的方法一起来这样做时,就会出现困难。也许不可 能或者不值得强制不同部分的加密工作由特定人员按特定顺序进行,然而成功地处理文档的不同部分将取决于是否知道这点。此外,由于数字签名断言已经使用了特 定专用密钥来认证,所以要小心签名人是以纯文本形式查看文档项的,这可能意味着对由于其它原因而加密的部分内容进行了解密。在另一种情况下,作为更大集合 中的一部分,可能对已经加密过的数据进行进一步加密。在牵涉单一 XML 文档(可能由一些不同的应用程序和不同的用户处理在工作流序列中使用的 Web 表单或一系列数据)的事务集中考虑的不同可能性越多,就越可能看到巨大的潜在复杂性。

还有其它问题。XML 语言的强项之一是,搜索是明确的,无二义性的:DTD 或 Schema 提供了相关语法的信息。如果将包括标记在内的文档的一部分作为整体加密,就会丧失搜索与那些标记相关的数据的能力。此外,如果标记本身被加密,那么一旦泄漏,它们将被利用对采用的密码术进行纯文本攻击。

这些是工作组正在考虑的一些方面。

XML 加密示例

XML 加密语法的核心元素是 EncryptedData 元素,该元素与 EncryptedKey 元素一起用来将加密密钥从发起方传送到已知的接收方, EncryptedData 是从 EncryptedType 抽象类型派生的。要加密的数据可以是任意数据、XML 文档、XML 元素或 XML 元素内容;加密数据的结果是一个包含或引用密码数据的 XML 加密元素。当加密元素或元素内容时, EncryptedData 元素替换 XML 文档加密版本中的该元素或内容。当加密的是任意数据时, EncryptedData 元素可能成为新 XML 文档的根,或者可能成为一个子代元素。当加密整个 XML 文档时, EncryptedData 元素可能成为新文档的根。此外, EncryptedData 不能是另一个 EncryptedData 元素的父代或子代元素,但是实际加密的数据可以是包括现有 EncryptedDataEncryptedKey 元素的任何内容。

加密工作草案给出了一些示例来演示:加密的颗粒度如何根据要求的不同而不同,以及可能出现什么结果。 清单 1 中的代码片断显示了带有信用卡和其它个人信息的未加密 XML 文档。在某些情况下(例如,隐藏支付机制的信息),可能希望加密除客户名称以外的所有信息, 清单 2的代码片断演示了如何这样做。



清单 1. 显示 John Smith 的银行帐户、5000 美元限额、卡号和有效期的的信息
     

John Smith

4019 2445 0277 5567
Bank of the Internet
04/02






清单 2. 除名称之外全部被加密的加密文档
     

John Smith
xmlns='http://www.w3.org/2001/04/xmlenc#'>
A23B45C56



但是,在其它情况下,可能只需要隐藏一些敏感内容 ― 可能来自商家或其它第三方 ― 清单 3 演示了这点。(请注意,显示了与加密内容相关的标记名。)



清单 3. 只隐藏了信用卡号的加密文档
     

John Smith


Type='http://www.w3.org/2001/04/xmlenc#Content'>
A23B45C56



Bank of the Internet
04/02



可能还有必要加密文档中的 所有信息, 清单 4演示了这点。



清单 4. 隐藏了全部内容的加密文档

Type='http://www.isi.edu/in-notes/iana/assignments/media-types/text/xml'>
A23B45C56


CipherData 可以封装,也可以引用原始加密数据。在第一种情况下, CipherValue 元素的内容显示原始数据,而在第二种情况,使用 CipherReference 元素,这包括了一个指向加密数据位置的 URI。


规范的 XML

对应用了密码散列算法的消息进行最轻微的更改也会产生不同的值。这为消息完整性方面提供了信任,并适于通常用法,但是也引入了进一步的复杂性 ― 两个 XML 文档虽然在逻辑上相等,但可能在确切文本比较中不同。象行定界符、空标记、在属性中使用十六进制而不是名称以及在特定情况下存在注释或注释变体这样的事情都可以成为文档的逻辑结构不受影响而实际彼此不同的实例。规范的 XML 规范描述了一种生成文档的物理表示(也成为范式)的方法,该范式解释允许的变体,以便如果两个文档具有同一范式,则认为两个文档在给定应用程序上下文中是逻辑相等的。

对于加密、特别是数字签名来说,这尤为重要,因为很明显,逻辑上相同的文本变体不应该表示文档的完整性及其发送方的认证是可疑的。用不同工具(譬如,解析 器)生成不同文本(并因而生成不同消息摘要)进行处理时也可能发生这样的事。因此,在生成签名和验证计算期间,应该在范式上进行消息摘要。如果摘要匹配, 这将确定:即使文本形式可能不同,它们在其上计算的范式也匹配。

摘自IBM developerWorks

标签: ,

星期二, 四月 03, 2007

libxslt教程

John Fleck

libxslt 0.4版的教程

版权所有,2001 John Fleck
翻译,2007 Ou Lanhui

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be found here.

目录

介绍
主要功能
准备解析
解析样式表
解析输入文件
应用样式表
保存结果
参数
清理

附录 代码

摘要


使用libxslt库建立一个例程的教程是执行XSLT转换,将一个XML文件转换到HTML格式。

介绍

可扩展标记语言(XML)是全球信息网协会为了结构化文本格式数据交换工作而制订的标准。由于它的通用性,现在十分流行。每台电脑都可以读取文本文件。有正确的工具,任何一台电脑都可以阅读其它电脑的XML文件。

这些工具中最重要的之一就是XSLT:可扩展的样式表语言转换。XSLT是一种可声明的语言,允许你使用样式表将你的XML转换至任何一种文本输出。libxslt提供执行转换的相关函数。

libxslt是一个由Daniel Veillard为GNOME项目编写的免费的C语言库,允许你编写执行XSLT转换的程序。

注意

虽然libxslt是在GNOME项目的赞助之下编写的,但是它并不依赖于任何GNOME库。在本教程中就没有使用。

本教程举例说明了一个读取XML文件,应用样式表然后保存输出结果的简单程序。这不是一个你自己想要创的程序。xsltproc是在libxslt包所包含的一个做相同的事情但是更健壮和全功能的程序。本例中所编写的这个程序是为了说明libxslt的功能而设计的xsltproc的一个裁减版本的程序。

xsltproc的全部代码在libxslt发行包的xsltproc.c文件里。它也可以在网站上获得。

引用:

* W3C XML页面
* W3C XSL页面
* libxslt页面

主要功能

目录

准备解析
解析样式表
解析输入文件
应用样式表
保存结果
参数
清理

想转换一个XML文件,你必须执行以下三个函数:

1. 解析输入文件
2. 解析样式表
3. 应用样式表

准备解析

在你可以开始解析输入文件或者样式表之前,你需要执行一些步骤或者设置实体的处理方式。这些步骤对于libxslt来说不是唯一的。一些解析XML文件的libxml2程序可能会采用相似的步骤。

首先,你需要设置一些libxml的内部参数。传递一个整数1给xmlSubstituteEntitiesDefault函数,这将告诉libxml2的解析器置换实体内容就象解析你的文件。(传入0则libxml2不进行对应的置换)

其次,把xmlLoadExtDtdDefaultValue的值设成等于1。这将告诉libxml装载外部实体子集。如果你不这样做,当你的输入文件包含外部实体子集的时候,将会出错。

解析样式表

解析样式表使用一个简单的函数调用,需要一个xmlChar类型的变量:

cur = xsltParseStylesheetFile((const xmlChar *)argv[i]);

在这种情况下,我将从命令行参数传入的样式表文件名转换成xmlChar类型。返回值是xsltStylesheetPtr类型的值,是一个包含样式表树和其它关于样式表信息的内存结构。它可以被直接操作,但是在本例中不需要如此。

解析输入文件

使用一个函数调用解析输入的文件:

doc = xmlParseFile(argv[i]);

这个函数会返回一个xmlDocPtr类型的指针,一个包含文档树的内存结构。这个结构可以直接被操作,但是在这个例子里你不需要这样做。

应用样式表

现在你已经有表达文档的树和内存中的样式表了,可以对文档应用样式表了。实现这一功能的函数是xsltApplyStylesheet:

res = xsltApplyStylesheet(cur, doc, params);

这个函数使用一个xsltStylesheetPtr和一个xmlDocPtr类型做为参数,即前两个函数返回的值。第三个变量,params用来传入为样式表传入XSLT参数。它是一个空结束的静态字符串类型的名称/值对数组。

保存结果

libxslt包括了一族用来保存结果的函数。对于这个例子,使用了xsltSaveResultToFile,结果将被保存到:

xsltSaveResultToFile(stdout, res, cur);

注意

libxml也包含输出函数,如xmlSaveFile,它也可以在这里使用。然而,如果这里没有使用libxslt的保存函数,在样式表中包含的输出相关信息,如使用的编码声明就会丢失。

参数

在XSLT中,参数可以作为向样式表传递附加信息的途径之一。 libxslt允许将XSLT参数作为一个值传入xsltApplyStylesheet。

在教学的例程和xsltproc,就是教程例子所基于的那个程序,参数的传递采用键-值对来进行。程序从命令行收集这些内容,并将它们插入到params数组,然后将它们传给对应的函数。数组中的最后一个元素被设置成NULL。

注意

如果被传递的参数是一个字符串而不是XSLT节点,则它会被忽略。在教程的程序中,对于教程产生的程序,将如下实现:tutorial]$ ./libxslt_tutorial --param rootid "'asect1'" stylesheet.xsl filename.xml

清理

你完成这些工作之后,libxslt和libxml提供了释放已分配内存的函数。
xsltFreeStylesheet(cur);1
xmlFreeDoc(res);2
xmlFreeDoc(doc);3
xsltCleanupGlobals();4
xmlCleanupParser();5

1 释放你的样式表使用的内存。
2 释放结果文档使用的内存。
3 释放原始文档使用的内存。
4 释放libxslt全局变量使用的内存。
5 释放XML解析使用的内存。

附录. 源代码

libxslt_tutorial.c

/*
* libxslt_tutorial.c: demo program for the XSL Transformation 1.0 engine
*
* based on xsltproc.c, by Daniel.Veillard@imag.fr
* by John Fleck
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Cambridge, MA 02139, USA.
*
*/

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include



extern int xmlLoadExtDtdDefaultValue;

static void usage(const char *name) {
printf("Usage: %s [options] stylesheet file [file ...]\n", name);
printf(" --param name value : pass a (parameter,value) pair\n");

}

int
main(int argc, char **argv) {
int i;
const char *params[16 + 1];
int nbparams = 0;
xsltStylesheetPtr cur = NULL;
xmlDocPtr doc, res;

if (argc <= 1) {
usage(argv[0]);
return(1);
}


for (i = 1; i < argc; i++) {
if (argv[i][0] != '-')
break;
if ((!strcmp(argv[i], "-param")) ||
(!strcmp(argv[i], "--param"))) {
i++;
params[nbparams++] = argv[i++];
params[nbparams++] = argv[i];
if (nbparams >= 16) {
fprintf(stderr, "too many params\n");
return (1);
}
} else {
fprintf(stderr, "Unknown option %s\n", argv[i]);
usage(argv[0]);
return (1);
}
}

params[nbparams] = NULL;
xmlSubstituteEntitiesDefault(1);
xmlLoadExtDtdDefaultValue = 1;
cur = xsltParseStylesheetFile((const xmlChar *)argv[i]);
i++;
doc = xmlParseFile(argv[i]);
res = xsltApplyStylesheet(cur, doc, params);
xsltSaveResultToFile(stdout, res, cur);

xsltFreeStylesheet(cur);
xmlFreeDoc(res);
xmlFreeDoc(doc);

xsltCleanupGlobals();
xmlCleanupParser();
return(0);

}

原文在此。有一些地方翻译的有问题,欢迎指导。

标签: , , , , ,

星期三, 三月 21, 2007

XML开发库

XSLT
LibXML2 + GDome + LibXSLT + XML Security
Apache Xerces for C + Apache Xalan for C + Apacge XML Security for C
IBM XML4C + IBM Lotus XSL
Expat + CenterPoint XML + Sablotron + Arabica
Expat
Arabica
RXP Parser
Oracle XDK for C/C++
Oracle XDK for Java
QT XML Module
Sun Crismon + Java WebServices Developer Pack 1.2 + Apache XML Security

标签: , ,

辽ICP备05003652号
流风洄雪听天籁,轻云蔽日看落花

Powered by Blogger