XML的全称Extensible Markup Language,意思是可扩展的标记语言,是标准通用标记语言SGML(Standard Generalized Markup Language)的一个子集。1998年2月,W3C发布了XML1.0标准,其目的是为了在Web上能以现有的超文本标记语言HTML的使用方式提供,接收和处理通用的SGML。XML是SGML的一个简化子集,它以一种开放的,自我描述的方式定义了数据结构,在描述数据内容的同时能突出对结构的描述,从而体现出数据与数据之间的关系。
XML和HTML比较
SGML是一种在Web发明前就早已存在的使用标记来描述文档资料的通用语言,HTML和XML都是从SGML发展而来的标记语言。但HTML是在SGML定义下得一个描述性的语言,只是SGML的一个应用。而XML是SGML的一个简化版本,是SGML的一个子集,严格意义上说,XML仍然是SGML。
XML文档不能描述页面的排版和表现形式,它只是用于描述数据和数据的结构,它将数据和显示分开了。
XML文档对格式要求更加严格
(1).开始标签必须要有一个结束标签配套。
(2).空元素标签必须被关闭。
(3).所有的标签都区分大小写。
(4).所有的标签都必须合理嵌套。
(5).所有标签的属性值必须用双引号或者单引号括起来。
(6).XML有且只能有一个根元素。 ......
xhtml的昙花一现带来不少问题,它的目的是让html表现得更像xml,所以才叫xhtml。但是出师未捷身先死,我们讨论一下如何判定文档是XML吧。
印象中jQuery对此方法重复实现了许多次,应该比较权威,也说明这判定比较难搞。看jQuery1.42的实现:
var isXML = function(elem){
// documentElement is verified for cases where it doesn't yet exist
// (such as loading iframes in IE - #4833)
var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
return documentElement ? documentElement.nodeName !== "HTML" : false;
};
好,做一个实验:
window.onload = function(){
try{
var doc = document.implementation.createDocument(null, 'HTML', null);//只限标准浏览器,创建一个XML文档
alert(doc.documentElement)
alert(isXML(doc))//应该返回true
}catch(e){
alert("不支持creatDocument方法")
}
}
<!doctype html>
<html lang="en">
<head>
&l ......
可以将XML文件的树(只有一个顶层节点).于是理所当然的可以用树作为XML的一种存储结构.
我将在这里用C++实现对简单的XML文件的解析.
1.选择存储结构:
树型数据结构有多种存储方式,我将用"孩子兄弟表示法",定义如下:
typedef struct CSNode
{
int subNodes;
string data;
string name;
struct CSNode *firstChild,*nextsibling,*parent;
CSNode* operator=(CSNode cnode)
{
this->data = cnode.data;
this->firstChild = cnode.firstChild;
this->name = cnode.name;
this->nextsibling = cnode.nextsibling;
this->subNodes = cnode.subNodes;
return this;
}
}CSNode,*CSTree;
2.定义一个ADT,提供操作的公共接口.取名为 xml
class xml
{
public:
xml();
xml(char *fileName);
~xml();
CSNode& CreateTree(); // 建立存储结构
bool findData(const char *nodepos); // 查找节点值
bool findData(const char *partent, const char *child,string *data); // 查找节点值
bool readfile_(); // 读取xml源文件
void allocate(); // 释放节点资源
private:
string _fileCope;
char* _filename;
CSNode *head;
}; ......
可以将XML文件的树(只有一个顶层节点).于是理所当然的可以用树作为XML的一种存储结构.
我将在这里用C++实现对简单的XML文件的解析.
1.选择存储结构:
树型数据结构有多种存储方式,我将用"孩子兄弟表示法",定义如下:
typedef struct CSNode
{
int subNodes;
string data;
string name;
struct CSNode *firstChild,*nextsibling,*parent;
CSNode* operator=(CSNode cnode)
{
this->data = cnode.data;
this->firstChild = cnode.firstChild;
this->name = cnode.name;
this->nextsibling = cnode.nextsibling;
this->subNodes = cnode.subNodes;
return this;
}
}CSNode,*CSTree;
2.定义一个ADT,提供操作的公共接口.取名为 xml
class xml
{
public:
xml();
xml(char *fileName);
~xml();
CSNode& CreateTree(); // 建立存储结构
bool findData(const char *nodepos); // 查找节点值
bool findData(const char *partent, const char *child,string *data); // 查找节点值
bool readfile_(); // 读取xml源文件
void allocate(); // 释放节点资源
private:
string _fileCope;
char* _filename;
CSNode *head;
}; ......
XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML。本文将详细介绍用Java解析XML的四种方法。
XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transformations),具体可参阅w3c官方网站文档http://www.w3.org获取更多信息。
XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。基本的解析方式有两种,一种叫SAX,另一种叫DOM。SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。假设我们XML的内容和结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee>
<name>ddviplinux</name>
<sex>m</sex>
<age>30</age>
</employee>
</employees>
本文使用JAVA语言来实现DOM与SAX的XML文档生成与解析。
首先定义一 ......
XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML。本文将详细介绍用Java解析XML的四种方法。
XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transformations),具体可参阅w3c官方网站文档http://www.w3.org获取更多信息。
XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。基本的解析方式有两种,一种叫SAX,另一种叫DOM。SAX是基于事件流的解析,DOM是基于XML文档树结构的解析。假设我们XML的内容和结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee>
<name>ddviplinux</name>
<sex>m</sex>
<age>30</age>
</employee>
</employees>
本文使用JAVA语言来实现DOM与SAX的XML文档生成与解析。
首先定义一 ......
在
SQLServer2005
中对
XML
的处理功能显然增强了很多,提供了
query(),value(),exist(),modify(),nodes()
等函数。
关于
xml
,难以理解的不是
SQLServer
提供的函数,而是对
xml
本身的理解,看似很简单的文件格式,处理起来却是非常困难的。本文只是初探一下而已。
详见
SQLServer
联机帮助:
主题
说明
query()
方法(
xml
数据类型)
此方法用于对
XML
实例进行查询。
value()
方法(
xml
数据类型)
此方法用于从
XML
实例检索
SQL
类型的值。
exist()
方法(
xml
数据类型)
此方法用于确定查询是否返回非空结果。
modify()
方法(
xml
数据类型)
此方法用于指定
XML DML
语句以执行更新。
nodes()
方法(
xml
数据类型)
此方法用于将
XML
拆分成多行以将
XML
文档的组成部分传播到行
集中。
闲话少说,首先创建一个包含
xml
类型的数据表,其次创建一个
xml
文件,在服务端把
xml
文件内容加载该数据表中。
CREATE
TABLE VisioXML
(
ID
INT,
Doc
XML
);
GO
创建一个
名为
xxx.xml
的文件,内容如下
/*
<ROOT>
<ROW>
......
在
SQLServer2005
中对
XML
的处理功能显然增强了很多,提供了
query(),value(),exist(),modify(),nodes()
等函数。
关于
xml
,难以理解的不是
SQLServer
提供的函数,而是对
xml
本身的理解,看似很简单的文件格式,处理起来却是非常困难的。本文只是初探一下而已。
详见
SQLServer
联机帮助:
主题
说明
query()
方法(
xml
数据类型)
此方法用于对
XML
实例进行查询。
value()
方法(
xml
数据类型)
此方法用于从
XML
实例检索
SQL
类型的值。
exist()
方法(
xml
数据类型)
此方法用于确定查询是否返回非空结果。
modify()
方法(
xml
数据类型)
此方法用于指定
XML DML
语句以执行更新。
nodes()
方法(
xml
数据类型)
此方法用于将
XML
拆分成多行以将
XML
文档的组成部分传播到行
集中。
闲话少说,首先创建一个包含
xml
类型的数据表,其次创建一个
xml
文件,在服务端把
xml
文件内容加载该数据表中。
CREATE
TABLE VisioXML
(
ID
INT,
Doc
XML
);
GO
创建一个
名为
xxx.xml
的文件,内容如下
/*
<ROOT>
<ROW>
......
(一) 先讲一下XML中的物殊字符,手动填写时注意一下。
字符 字符实体
& &或&#38;
' '或'
> >或>
< <或&<
" "或"
......