阳光男孩

Never give up!

Entries Tagged ‘xml’

面向Java的XML/HTML模板引擎

5顶一下Thymeleaf的首个稳定版(1.0.0版)已经于上月17日发布了。Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用。它是个开源的Java库,基于Apache License 2.0许可,由Daniel Fernández创建,Daniel Fernández还是Java加密库Jasypt的作者。Thymeleaf旨在替换掉JSP及其他的模板引擎,如Velocity与FreeMarker。它提供了两个版本,分别是Standard方言与SpringStandard(Spring MVC ...[阅读全文]

5
顶一下

Thymeleaf的首个稳定版(1.0.0版)已经于上月17日发布了。Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用。它是个开源的Java库,基于Apache License 2.0许可,由Daniel Fernández创建,Daniel Fernández还是Java加密库Jasypt的作者。Thymeleaf旨在替换掉JSP及其他的模板引擎,如Velocity与FreeMarker。它提供了两个版本,分别是Standard方言与SpringStandard(Spring MVC 3)方言,并且可以通过创建自定义方言进行扩展。

Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定好的逻辑。Thymeleaf的可扩展性也非常棒。你可以使用它定义自己的模板属性集合,这样就可以计算自定义表达式并使用自定义逻辑。这意味着Thymeleaf还可以作为模板引擎框架。

那么Thymeleaf与其他流行的模板引擎如Velocity和FreeMarker相比如何呢?Thymeleaf是与众不同的,因为它使用了自然的模板技术。这意味着Thymeleaf的模板语法并不会破坏文档的结构,模板依旧是有效的XML文档。模板还可以用作工作原型,Thymeleaf会在运行期替换掉静态值。Velocity与FreeMarker则是连续的文本处理器,这样他们就可以处理任何基于文本的模板了。另一方面,Thymeleaf是个XML处理器,它使用了DOM。只能处理基于XML格式的这种限制使得Thymeleaf能够充分利用XML和Web环境所独有的特性。注意,由于Thymeleaf使用了XML DOM解析器,因此它并不适合于处理大规模的XML文件。

下面的代码示例分别使用Velocity、FreeMarker与Thymeleaf打印出一条消息:

Velocity: <p>$message</p>

FreeMarker: <p>${message}</p>

Thymeleaf: <p th:text=”${message}”>Hello World!</p>

注意到Thymeleaf去掉了图形化标签,并支持硬编码的文本,在运行期可以将这些文本替换掉。

你可以使用表达式的形式编写Thymeleaf属性,一共有4种类型的属性,分别是变量表达式、选择表达式、文本具化表达式以及URL表达式。变量表达式是Object-Graph Navigation Language(OGNL)表达式,如果使用了SpringStandard,那么还可以使用Spring EL,表达式在上下文图中执行。选择表达式类似于变量表达式,只不过他们是在父对象上执行。你可以通过文本具化表达式从外部资源如.properties文件中检索内容。URL表达式会将上下文与Session信息添加到URL中。感兴趣的读者可以阅读“Getting started with the Standard dialects”这篇文章详细了解Thymeleaf的使用示例。

你可以从SourceForge上下载Thymeleaf并阅读Using Thymeleaf指南来快速上手。如果使用Maven,那么你可以使用org.thymeleaf groupid和thymeleaf artifactId。Thymeleaf最小的依赖是Java SE 5、ognl 3.0、javassist 3.14.0-GA及slf4j 1.6.1。感兴趣的读者可以通过Thymeleaf官方文档和论坛了解更多信息。

查看英文原文:http://www.infoq.com/news/2011/08/thymeleaf-1.0.0-template-engine

Leave a Comment

XML初学者必须知道的十条基础知识

0顶一下1.XML是用来组织数据结构的 结构数据包括如:电子数据表、地址簿、控制器参数、财务交易及技术绘图等。XML是一系列文字格式设计的规则(也可称之为指导方针或惯例),来帮助你组织数据结构。XML不是一种程序语言,所以你不必一定是程序员,同样可以使用或学习它。XML使计算机简单地生成及读取数据,并确保数据结构精确。XML避免了一般语言设计的缺陷:它是可扩展的、跨平台、支持国际化及...[阅读全文]

0
顶一下

1.XML是用来组织数据结构的
结构数据包括如:电子数据表、地址簿、控制器参数、财务交易及技术绘图等。XML是一系列文字格式设计的规则(也可称之为指导方针或惯例),来帮助你组织数据结构。XML不是一种程序语言,所以你不必一定是程序员,同样可以使用或学习它。XML使计算机简单地生成及读取数据,并确保数据结构精确。XML避免了一般语言设计的缺陷:它是可扩展的、跨平台、支持国际化及区域化的格式,绝对支持Unicode格式。

2.XML类似于HTML
和HTML一样,XML是使用标签<tags>(使用”<”和”>”包含)和属性(以”name”=”value”的形式)。一旦HTML指定了每一个标签和属性的定义,一般文字在浏览器中表现的形式后,XML只使用这些标签来界定一些资料的特殊意义,但整体句子的意思则随个别应用程式读取时界定。换句话说,如你看到一个XML档中的”<p>”,千万不要以为是段落的意思。根据XML上下文的解释,它可能是一个价?quot;price”、一个参表”parameter”、一个人”person”、或…(这样谁可以界定一个”p”字的定义呢?)
3.XML是文字,但不是被阅读的
制作电子数据表、地址簿及其它结果数据的程序一般是存储在磁盘中,以二进制或文字格式储存的。其中文字存储格式的好处是,人们在需要时阅读这些文字,而不须制作文件所用的程式;另外,你也可以用你喜爱的文字处理器来读取文件。文字格式也容许开发者更容易地理解应用程式。如HTML,XML档是一些人类无需阅读,但若有须要时亦可阅读的文字档案。不太像HTML,XML的规则是非常严格。若忘记了一个标签或属性漏了一个引号便使这个XML档无法执行,但在HTML内这些错误却可以接受的。正规的XML定义防止程式尝试去猜测这个已被破坏的XML档的意思;若发现一个被破坏了的档案,应用程式便会立刻在那儿停止并报告发生错误的讯息。
4.XML是很详尽的
因为XML是文字格式及其为使用标签来解放资料,XML文件差不多比所有以二进制格式的文件档大。这点往往是XML设计者必定留意及考虑的。文字格式的好处是一切都很清楚(看上文第3点),但亦有不同程度的缺点。磁盘空间的价钱比以前大幅降低;而其它的文件压缩程序如zip和gzip便能简易快捷地把文件压缩。此外,网络上的通讯协议,如数据机通讯协定及HTTP/1.1便可以在传送时把资料压缩,节省效能跟二进位格式的文件同样有效率!
5.XML是一个技术大家族
XML1.0界定标签”tags”及属性”attributes”的定义。在XML1.0以外,”XML家族”是一项成长中的技术专案以提供有用服务予以配合多项重要及须求率高的工作。XLink解释了怎样加入连结至一个XML档。XPointer及XFragments文件部份发展的语法。XPointer有点像URL,但除指向一个网上文件外,它亦指向一件在XML文件内的资料。CSS~界定文件式样语言,使用在XML上跟在HTML无异。XSL是表达版面式样”stylesheets”的进阶语言。以XSLT,一种用作重新排列、加入或减除标签及属性的转化性语言为基础。DOM是用来从一种程式语言中,叫取XML档(及HTML档)的一组标准。XMLSchemas1和2帮助开发者精确地界定它们自己的一套XML基础格式。还有其他种类的专案和工具可供考虑或正被开发中。可多留意W3C的技术报告。
6.XML是新事物,但不是全新的产物
XML的开发始于1996年,并于1998年2月成为W3C的推荐文件;这可能使你认为这是一项并不十分成熟的技术。但事实上,这项技术并不如想象中的新!在XML之前曾有80年代初开发的SGML,一项自1986年有ISO标准及被广泛地使用在大型文件策划专案中。HTML从1990年起开发。XML的设计者只要把SGML中最好的部份,以发展HTML的经验指引来开发一些不逊于SGML,但比之更有规范和可更简易地使用的技术。虽然有些时候很难分辨演变和革命的成就…但可以确定的,是当SGML被广泛地使用在技术文件而被其他种类的资料所疏忽时,XML的情况是刚好相反的!
7.XML带领HTML至XHTML
一个重要的文字性质的XML应用程式:W3C的XHTML,一个接替HTML的格式。XHTML有许多跟HTML一样的原素。有一些语法为了配合XML规则而改变了。一份使用”XML基础”的文件代替及限制了XML的语法其在某些方面的用法(例如:XHTML容许”
“但并不接受”");它更加入一些意义到语法上(XHTML指定”
“的意思是段落”paragraph”,而不是价格”price”或人”person”或其他事物)。
8.XML是模块化的XML容许你利用合并及再使用其他格式来自定新的文件格式。因为两种独立开发的格式可能包含一些原材料或称号用着同一名称,所以当合并使用这些格式时得特别小心(如”
“在一份文件代表”段落paragraph”是否可能在另一方代表”人物person”呢?)要解决当合并使用两种格式时出现名称混淆的问题,XML提供了一项名为namespace的概念。XSL和RDF正是用了namespaces的以XML为基础的格式。XMLSchema以简单的方法来合并两种规格以演变出包含了两种规格的第三种格式,是用来反映出在界定XML文件结构时用以引导的支援。
9.XML是RDF及SemanticWeb的基础
XML提供了一个规范的守则予W3C的RDF,一种用以表达资料(事实上,基本上是为知识)的语言。RDF就像一个网上连结的下一个层面。一般网上连结把一些文字连接到一些没有固定关连的事物上,唯RDF可以把任何事物在连结起后给予一个关系名称:如”甲是乙的价格”可以是一件物品和一个价格总和的关系;又如”甲比乙重”可以是两个总和的关系;又或”甲是乙的原因”可以是沐浴和你身体湿了的关系。当你在知识沟通的时候,不论是以XML/RDF或是以纯英语,人或机械上均须要同意某字词在某方面的用途。一系列特定的文字可以用来形容一些特定的生活方式(从”购物”至”数学逻辑”)便称之为”Ontology”.RDF,Ontologies及其代表意思,使电脑可以帮我们执行所有SemanticWeb活动。
10.XML是没有版权限制、跨平台独立且维护方便
当你选择XML为你计划的基础,你就像已得到一些庞大及增长中的工具(其中一些可能已做到你所需要的)及工程技术员多年积累的技术经验。选择使用XML就像在进行资料库管理时选择SQL的程序:你依然要建立你自己的资料库及你自己的程式及步骤来进行,及有许多工具和许多人来协助你。由于XML是没有版权限制,你可以建立你自己一套软体而无须支付任何费用予别人。而庞大及增多中的支援意谓你无须依赖任何单一商号。XML虽并不永远代表是最好的方案,但永远值得你考虑。
当你选择XML为你计划的基础,你就像已得到一些庞大及增长中的工具(其中一些可能已做到你所需要的)及工程技术员多年积累的技术经验。选择使用XML就像在进行资料库管理时选择SQL的程序:你依然要建立你自己的资料库及你自己的程式及步骤来进行,及有许多工具和许多人来协助你。由于XML是没有版权限制,你可以建立你自己一套软体而无须支付任何费用予别人。而庞大及增多中的支援意谓你无须依赖任何单一商号。XML虽并不永远代表是最好的方案,但永远值得你考虑。

 

Comments (18)

XML初学者必须知道的十条基础知识

0顶一下一直都对XML有种望尘莫及的感觉,直到看到这篇文章,才终于让我对它的学习有了更进一步的掌握,原来,它是这么的有亲和力。XML、 XLink、Namespace、DTD、Schema、CSS、XHTML这些莫名的单词其实也并没我们想象中的那么无理取闹。如果你是一个XML语言的初学者,那么我强烈建议你把这十个XML自身特点的描述看完,你可以清晰明了地掌握到XML的一些基本概念,然后消化掉,最后应用到自己的程序...[阅读全文]

0
顶一下

一直都对XML有种望尘莫及的感觉,直到看到这篇文章,才终于让我对它的学习有了更进一步的掌握,原来,它是这么的有亲和力。XML、 XLink、Namespace、DTD、Schema、CSS、XHTML这些莫名的单词其实也并没我们想象中的那么无理取闹。如果你是一个XML语言的初学者,那么我强烈建议你把这十个XML自身特点的描述看完,你可以清晰明了地掌握到XML的一些基本概念,然后消化掉,最后应用到自己的程序设计中去。

首先,需要指出的是文章来自网络,英文原文为W3C.org官方发布: XML in 10 points中文翻译具体不祥。

1. XML是用来组织数据结构的

结构数据包括如: 电子数据表、地址簿、控制器参数、财务交易及技术绘图等。XML是一系列文字格式设计的规则(也可称之为指导方针或惯例),来帮助你组织数据结构。XML不是一种程序语言,所以你不必一定是程序员,同样可以使用或学习它。XML使计算机简单地生成及读取数据,并确保数据结构精确。XML避免了一般语言设计的缺陷:它是可扩展的、跨平台、支持国际化及区域化的格式,绝对支持Unicode格式。

2. XML类似于HTML
和HTML一样,XML是使用标签<tags>(使用 “<”和”>”包含)和属性(以”name”=”value”的形式)。一旦HTML指定了每一个标签和属性的定义,一般文字在浏览器中表现的形式后, XML只使用这些标签来界定一些资料的特殊意义,但整体句子的意思则随个别应用程式读取时界定。换句话说,如你看到一个XML档中的 “<p>”, 千万不要以为是段落的意思。根据XML上下文的解释,它可能是一个价?quot;price”、一个参表”parameter”、一个人 “person”、或…(这样谁可以界定一个”p”字的定义呢?)

3. XML是文字, 但不是被阅读的
制作电子数据表、地址簿及其它结果数据的程序一般是存储在磁盘中,以二进制或文字格式储存的。其中文字存储格式的好处是,人们在需要时阅读这些文字,而不须制作文件所用的程式; 另外, 你也可以用你喜爱的文字处理器来读取文件。文字格式也容许开发者更容易地理解应用程式。如HTML,XML档是一些人类无需阅读,但若有须要时亦可阅读的文字档案。不太像HTML,XML的规则是非常严 格。若忘记了一个标签或属性漏了一个引号便使这个XML档无法执行,但在HTML内这些错误却可以接受的。正规的XML定义防止程式尝试去猜测这个已被破 坏的XML档的意思;若发现一个被破坏了的档案,应用程式便会立刻在那儿停止并报告发生错误的讯息。

4. XML是很详尽的

因为XML是文字格式及其为使用标签来解放资料,XML文件差不多比所有以二进制格 式的文件档大。这点往往是XML设计者必定留意及考虑的。文字格式的好处是一切都很清楚(看上文第3点),但亦有不同程度的缺点。磁盘空间的价钱比以前大 幅降低;而其它的文件压缩程序如zip和gzip便能简易快捷地把文件压缩。此外,网络上的通讯协议,如数据机通讯协定及HTTP/1.1便可以在传送时 把资料压缩,节省效能跟二进位格式的文件同样有效率!

5. XML是一个技术大家族

XML1.0界定标签”tags”及属性”attributes”的定义。在 XML1.0以外,”XML家族”是一项成长中的技术专案以提供有用服务予以配合多项重要及须求率高的工作。XLink解释了怎样加入连结至一个XML 档。XPointer及XFragments文件部份发展的语法。XPointer有点像URL,但除指向一个网上文件外,它亦指向一件在XML文件内的 资料。CSS~界定文件式样语言,使用在XML上跟在HTML无异。XSL是表达版面式样”style sheets”的进阶语言。以XSLT,一种用作重新排列、加入或减除标签及属性的转化性语言为基础。DOM是用来从一种程式语言中,叫取XML档(及 HTML档)的一组标准。XML Schemas 1和2帮助开发者精确地界定它们自己的一套XML基础格式。还有其他种类的专案和工具可供考虑或正被开发中。可多留意W3C的技术报告。

6. XML是新事物,但不是全新的产物
XML的开发始于1996年,并于1998年2月成为W3C的推荐文 件;这可能使你认为这是一项并不十分成熟的技术。但事实上,这项技术并不如想象中的新!在XML之前曾有80年代初开发的SGML,一项自1986年有 ISO标准及被广泛地使用在大型文件策划专案中。HTML从1990年起开发。XML的设计者只要把SGML中最好的部份,以发展HTML的经验指引来开 发一些不逊于SGML,但比之更有规范和可更简易地使用的技术。虽然有些时候很难分辨演变和革命的成就…但可以确定的,是当SGML被广泛地使用在技 术文件而被其他种类的资料所疏忽时,XML的情况是刚好相反的!

7. XML带领HTML至XHTML
一个重要的文字性质的XML应用程式:W3C的XHTML,一个接替 HTML的格式。XHTML有许多跟HTML一样的原素。有一些语法为了配合XML规则而改变了。一份使用”XML基础”的文件代替及限制了XML的语法 其在某些方面的用法(例如:XHTML容许”

”但并不接受””);它更加入一些意义到语法上(XHTML指定 “

”的意思是段落”paragraph”,而不是价格”price”或人”person”或其他事物)。

8. XML是模块化的

XML容许你利用合并及再使用其他格式来自定新的文件格式。因为两种独立开发的格式可 能包含一些原材料或称号用着同一名称,所以当合并使用这些格式时得特别小心(如”

”在一份文件代表”段落paragraph”是否可能 在另一方代表”人物person”呢?)要解决当合并使用两种格式时出现名称混淆的问题,XML提供了一项名为namespace的概念。XSL和RDF 正是用了namespaces的以XML为基础的格式。XML Schema以简单的方法来合并两种规格以演变出包含了两种规格的第三种格式,是用来反映出在界定XML文件结构时用以引导的支援。

9. XML是RDF及Semantic Web的基础
XML提供了一个规范的守则予W3C的RDF,一种 用以表达资料(事实上,基本上是为知识)的语言。RDF就像一个网上连结的下一个层面。一般网上连结把一些文字连接到一些没有固定关连的事物上,唯RDF 可以把任何事物在连结起后给予一个关系名称:如”甲是乙的价格”可以是一件物品和一个价格总和的关系;又如”甲比乙重”可以是两个总和的关系;又或”甲是 乙的原因”可以是沐浴和你身体湿了的关系。当你在知识沟通的时候,不论是以XML/RDF或是以纯英语,人或机械上均须要同意某字词在某方面的用途。一系 列特定的文字可以用来形容一些特定的生活方式(从”购物”至”数学逻辑”)便称之为”Ontology”。RDF, Ontologies及其代表意思,使电脑可以帮我们执行所有Semantic Web活动。

10. XML是没有版权限制、跨平台独立且维护方便
当你选择XML为你计划的基础,你就像已得到一 些庞大及增长中的工具(其中一些可能已做到你所需要的)及工程技术员多年积累的技术经验。选择使用XML就像在进行资料库管理时选择SQL的程序:你依然 要建立你自己的资料库及你自己的程式及步骤来进行,及有许多工具和许多人来协助你。由于XML是没有版权限制,你可以建立你自己一套软体而无须支付任何费 用予别人。而庞大及增多中的支援意谓你无须依赖任何单一商号。 XML虽并不永远代表是最好的方案, 但永远值得你考虑。

 

Comments (67)

ASP.NET:从XML文档转换到DataSet

0顶一下 以下是代码片段: using System; using System.Xml; using System.Data; using System.Text; using System.IO; namespace NET.MST.Tenth.XmlAndDataSet { partial class XmlAndDataSet { static void Main(string[] args) { Console.WriteLine(“从XML文档转换到DataSet:”); DataSet ds = ConvertXMLFileToDataSet(“..\\..\\Test.xml”); PrintDataSet(ds); Console.WriteLine(“从D...[阅读全文]

0
顶一下

以下是代码片段:
using System;
using System.Xml;
using System.Data;
using System.Text;
using System.IO;
namespace NET.MST.Tenth.XmlAndDataSet
{
partial class XmlAndDataSet
{
static void Main(string[] args)
{
Console.WriteLine(“从XML文档转换到DataSet:”);
DataSet ds = ConvertXMLFileToDataSet(“..\\..\\Test.xml”);
PrintDataSet(ds);
Console.WriteLine(“从DataSet转换回XML文档:”);
ConvertDataSetToXML(ds).Save(Console.Out);
Console.Read();
}
///
/// 打印DataSet
///
/// DataSet对象
static void PrintDataSet(DataSet ds)
{
foreach (DataTable table in ds.Tables)
{
Console.WriteLine(“表{0}:”, table.TableName);
foreach (DataColumn column in table.Columns)
{
Console.Write(“{0}({1}) “, column.ColumnName, column.ColumnMapping.ToString());
}
Console.Write(“\r\n”);
foreach (DataRow row in table.Rows)
{
foreach (DataColumn col in table.Columns)
{
Console.Write(“{0} “, row[col.ColumnName].ToString().Trim());
}
Console.Write(“\r\n”);
}
}
}
}
partial class XmlAndDataSet
{
///
/// 将xml文件转换为DataSet
///
public static DataSet ConvertXMLFileToDataSet(string xmlFile)
{
//读入XML文档
XmlDocument xml = new XmlDocument();
xml.Load(xmlFile);
DataSet result = new DataSet();
using (StringReader stream = new StringReader(xml.InnerXml))
{
using (XmlTextReader reader = new XmlTextReader(stream))
{
result.ReadXml(reader);
return result;
}
}
}
///
/// 将DataSet转换为xml对象字符串
///
public static XmlDocument ConvertDataSetToXML(DataSet ds)
{
using (MemoryStream stream = new MemoryStream())
{
//通过XmlTextWriter来生成XML
using (XmlTextWriter writer = new XmlTextWriter(stream, Encoding.Unicode))
{
//DataSet转换为XML文档
ds.WriteXml(writer);
//从流中读出数据
int count = (int)stream.Length;
byte[] arr = new byte[count];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(arr, 0, count);
XmlDocument result = new XmlDocument();
result.LoadXml(“”+
Encoding.Unicode.GetString(arr).Trim());
return result;
}
}
}
}
}

Comments (46)

jquery+ajax+xml+php简单留言板

0顶一下话不多说,如果哦看不动的去论坛上发帖 <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml”> <head> <title>无刷jquery php xml 留言板版</title> <meta. http-equiv=”Content-Type” content=”text/html; charset=utf-...[阅读全文]

0
顶一下

话不多说,如果哦看不动的去论坛上发帖

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<title>无刷jquery php xml 留言板版</title>
<meta. http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<style>
* { margin:0; padding:0}
ul {list-style.:none}
#msglist{width:800px; vertical-align:text-top; margin:20px auto 0px auto; }

dt{background:url(wtp-m.png);padding:5px}
dl{border:solid 1px #8db2e3}
dd{padding:5px}
#page span{cursor: pointer;}
#commentformbox{width:800px;vertical-align:text-top;margin:20px auto 0px auto; }
#commentformbox TEXTAREA{width:400px;height:100px;vertical-align:text-top;margin:20px auto 0px auto; }
</style>
<SCRIPT. LANGUAGE=”JavaScript” src=”js/jquery-1.2.6.js”></script>
<SCRIPT. LANGUAGE=”JavaScript”>
<!–
$(document).ready(function() {

function load_msg(page)
{
$(‘#state’).html(“当前状态:正在加载数据请稍等….”);
page=$(this).html();
page=page==”undefined”?1:page;

$.post(“comments-ajax.php”,{action:”load”,page:page},function(data){
//alert($(data).find(“span”).text());

$(‘#commentlist dl’).html(data); // 追加留言数据
$(‘#commentlist dl’).find(“span”).bind(“click”,load_msg);
$(‘#state’).html(“当前状态:数据加载完毕”);
})

}

load_msg();
if ($(‘#commentform’).length) {
$(‘#commentform’).submit(function(){
jQuery.ajax({
url: ‘comments-ajax.php’, // 这里要改为 comments-ajax.php 文件的位置
data: $(‘#commentform’).serialize(), // 从表单中获取数据
type: ‘POST’, // 设置请求类型为 ‘POST’,默认为 ‘GET’
beforeSend: function() {
$(‘#state’).html(“当前状态:正在发送数据。。。。”);
},
error: function(request) {
$(‘#state’).html(request.responseText);
},
success: function(data) {
$(‘textarea’).each(function(){
this.value=”;
});

$(‘#state’).html(“当前状态:发布数据成功”);
$(‘#commentlist dl’).prepend(data); // 追加留言数据
$(‘#commentform.:input’).attr(‘disabled’, true);
$(‘#commentformbox’).fadeOut(1000);
$(‘#commentload’).hide();
setTimeout(function() { // 提交留言 15 秒后方可再次提交新留言
$(‘#commentform.:input’).removeAttr(‘disabled’);
$(‘#commentformbox’).fadeIn(15000);
}, 5000);
}
});
return false;
});
}
})

//–>
</SCRIPT>
<body>
<div ID=”state”>当前状态</div>
<div ID=”msglist”>
<div id=”commentlist”>
<dl>

</dl>
</div>
</div>

<div id=commentformbox>
<FORM. METHOD=POST ACTION=”" ID=”commentform”>
<TEXTAREA NAME=”Content” ROWS=”" COLS=”"></TEXTAREA><br><INPUT TYPE=”submit” value=”发布信息”>
</FORM>
</div>
</body>

comments-ajax.php

<?php
//==========================================
// 文件名: comments-ajax.php
// 说   明: 简单的jquery php XML 留言簿
// power by cnjquery.com
//==========================================
if ($_SERVER["REQUEST_METHOD"] != “POST”) {
header(‘Allow: POST’);
header(“HTTP/1.1 405 Method Not Allowed”);
header(“Content-type: text/plain”);
exit;
}

class guestbook extends DOMDocument
{
var $pagenum=10;

public function __construct()
{
parent:: __construct();
if (!file_exists(“guestbook.xml”))
{
$xmlstr = “<?xml version=’1.0′?><msglist></msglist>”;
$this->loadXML($xmlstr);
$this->save(“guestbook.xml”);
}
else
$this->load(“guestbook.xml”);
}
public function loadMessage($page)
{
$page=($page>0)?$page:1;
$num=($page-1)*$this->pagenum;
$roots = $this->getElementsByTagName( “msglist” );
//print_r($roots);
$root=$roots->item(0);
$msg=$root->getElementsByTagName( “msg” );
$total=$msg->length;
// echo $total;
$totalpage=ceil($total/$this->pagenum);
$totalpage=$totalpage?$totalpage:1;
$startid=$total<$num?$total:$total-$num;
$listnum=$startid>$this->pagenum?$startid-$this->pagenum:0;
//echo $startid;
//echo $listnum;
for($i=$startid-1;$i>=$listnum;$i–)
{

echo “<dt> &nbsp;&nbsp;ip:”.$msg->item($i)->getElementsByTagName(“ip”)->item(0)->nodeValue.”&nbsp;&nbsp;time:”.$msg->item($i)->getElementsByTagName(“time”)->item(0)->nodeValue.”</dt><dd>”.trim(nl2br($msg->item($i)->getElementsByTagName(“content”)->item(0)->nodeValue)).”</dd>”;
}
echo “<dt ID=page>”;
for($i=1;$i<=$totalpage;$i++)
{
echo “&nbsp;&nbsp;<span>”.$i.”</span>”;
}
echo “</dt>”;

}
public function saveMessage($clientIP,$clientTime,$postContent)
{
$msglists = $this->getElementsByTagName( “msglist” );
$msglist = $msglists->item(0);
$msg = $this->createElement( “msg” );
$ip = $this->createElement( “ip” );
$ip->appendChild( $this->createTextNode($clientIP)  );
$msg->appendChild($ip);
$time=$this->createElement( “time” );
$time->appendChild( $this->createTextNode($clientTime)  );
$msg->appendChild($time);
$content=$this->createElement( “content” );
$content->appendChild( $this->createCDATASection(nl2br(SafeHtml($_POST["Content"])))  );
$msg->appendChild($content);
$msglist->insertBefore ($msg);
$this->save(“guestbook.xml”);
echo “<dt> &nbsp;&nbsp;ip:”.$clientIP.”&nbsp;&nbsp;time:”.$clientTime.”</dt><dd>”.$postContent.”</dd>”;
}
}
$guestbook = new guestbook;
if($_POST["action"]==”load”)
{
$guestbook->loadMessage(intval($_POST["page"]));
exit;
}
$IP=$_SERVER["SERVER_ADDR"];
$time=date(“Y-m-d H:i:s”);
$content=nl2br(SafeHtml($_POST["Content"]));
$guestbook->saveMessage($IP,$time,$content);
exit;

//http://hellobmw.com/archives/ajax-comments-with-jquery-for-wordpress.html
Function SafeHtml($msg = “”,$clear_script=true)
{
if(empty($msg))
{
return false;
}
$msg = str_replace(‘&amp;’,'&’,$msg);
$msg = str_replace(‘&nbsp;’,’ ‘,$msg);
if(get_magic_quotes_gpc())
{
$msg = str_replace(“\’”,”&#39;”,$msg);
$msg = str_replace(‘\”‘,”&quot;”,$msg);
}
else
{
$msg = str_replace(“‘”,”&#39;”,$msg);
$msg = str_replace(‘”‘,”&quot;”,$msg);
}
$msg = str_replace(“<”,”&lt;”,$msg);
$msg = str_replace(“>”,”&gt;”,$msg);
$msg = str_replace(“\t”,”&nbsp; &nbsp; “,$msg);
$msg = str_replace(“\r”,”",$msg);
$msg = str_replace(“   “,”&nbsp; &nbsp;”,$msg);
if($clear_script)
{
$msg = preg_replace(“/<script(.*?)<\/script>/is”,”",$msg);
$msg = preg_replace(“/<frame(.*?)>/is”,”",$msg);
$msg = preg_replace(“/<iframe(.*?)>/is”,”",$msg);
$msg = preg_replace(“/<\/fram(.*?)>/is”,”",$msg);
}
return $msg;
}

?>

 

Comments (10)

JAVA读取xml文件中节点值

1顶一下import org.w3c.dom.*; import javax.xml.parsers.*; import java.io.*; public class Parse{ //Document可以看作是XML在内存中的一个镜像,那么一旦获取这个Document 就意味着可以通过对 //内存的操作来实现对XML的操作,首先第一步获取XML相关的Document private Document doc=null; public void init(String xmlFile) throws Exception{ //很明显该类是一个单例,先获取产生DocumentBuild...[阅读全文]

1
顶一下

import org.w3c.dom.*;

import javax.xml.parsers.*;

import java.io.*;

public class Parse{

//Document可以看作是XML在内存中的一个镜像,那么一旦获取这个Document 就意味着可以通过对

//内存的操作来实现对XML的操作,首先第一步获取XML相关的Document

private Document doc=null;

public void init(String xmlFile) throws Exception{

//很明显该类是一个单例,先获取产生DocumentBuilder工厂

//的工厂,在通过这个工厂产生一个DocumentBuilder,

//DocumentBuilder就是用来产生Document的

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();

DocumentBuilder db=dbf.newDocumentBuilder();

//这个Document就是一个XML文件在内存中的镜像

doc=db.parse(new File(xmlFile));

}

//该方法负责把XML文件的内容显示出来

public void viewXML(String xmlFile) throws Exception{

this.init(xmlFile);

//在xml文件里,只有一个根元素,先把根元素拿出来看看

Element element=doc.getDocumentElement();

System.out.println(“根元素为:”+element.getTagName());

NodeList nodeList=doc.getElementsByTagName(“dbstore”);

System.out.println(“dbstore节点链的长度:”+nodeList.getLength());

Node fatherNode=nodeList.item(0);

System.out.println(“父节点为:”+fatherNode.getNodeName());

//把父节点的属性拿出来

NamedNodeMap attributes=fatherNode.getAttributes();

for(int i=0;i<attributes.getLength();i++){

Node attribute=attributes.item(i);

System.out.println(“dbstore的属性名为:”+attribute.getNodeName()+” 相对应的属性值为:”+attribute.getNodeValue());

}

NodeList childNodes = fatherNode.getChildNodes();

System.out.println(childNodes.getLength());

for(int j=0;j<childNodes.getLength();j++){

Node childNode=childNodes.item(j);

//如果这个节点属于Element ,再进行取值

if(childNode instanceof Element){

//System.out.println(“子节点名为:”+childNode.getNodeName()+”相对应的值 为”+childNode.getFirstChild().getNodeValue());

System.out.println(“子节点名为:”+childNode.getNodeName()+”相对应的值 为”+childNode.getFirstChild().getNodeValue());

}

}

}

public static void main(String[] args)throws Exception{

Parse parse=new Parse();

//我的XML文件

parse.viewXML(“netct.xml”);

}

}

Comments (42)