Linux环境下XML解析技术详解 (linux中对xml解析)

XML,即可扩展标记语言,是一种人类和计算机都能理解的格式化数据交换方式。它在数据传输和存储中广泛应用。Linux环境下的XML解析技术则是在Linux操作系统下对XML数据进行解析的一项重要技术,本文将从如下几个方面详细介绍Linux环境下XML解析技术。

一、XML的基本结构

XML语言有其固定的结构,其基本结构如下:

“`xml

Three

Four

“`

在此基本结构中,XML由标签、属性以及标签内的文本等构成。其中,标签是XML的核心,用于描述数据的结构,在标签内可以嵌套其他标签,从而形成节点树。属性是用于描述标签的附属信息,例如标签名、标签类型等。标签内的文本则是描述该标签所代表的数据。

二、Linux环境下XML解析库

Linux下有多种XML解析库可以进行XML解析,具体包括以下几种:

1. expat

expat是一种轻量级的XML解析库,可用于解析大型XML数据。它是开源的,并且其API简单易用,使用方便。当需要解析非常庞大的XML文件时,expat通常会更快、更有效。

2. libxml2

libxml2是用于C和C++程序的高性能XML解析库。它具有高度的灵活性和可扩展性,可支持大多数XML标准和编码,例如XSLT、XPath、XML Schema等。libxml2使用方便,兼容大多数操作系统。

3. TinyXML

TinyXML是一种小型、轻量级、易于处理的XML解析库,在解析XML文件时CPU/C内存占用非常少。它十分灵活,支持从XML文件中读取、修改和生成XML应用。

三、解析XML文件的方式

在Linux环境下,解析XML文件通常有两种方式:

1. SAX方式

SAX是一种事件驱动的解析方式。SAX解析器解析XML文档时,会一行一行地读取,然后触发事件,例如读取一个元素时就会触发start_element、end_element事件。SAX方式是一种较为快速的解析方式,适合用于处理较大的XML文件。

2. DOM方式

DOM是一种基于内存的解析方式。在DOM解析XML文档时,解析器会先将XML文件读入内存,并创建一个XML树结构。这种解析方式更加灵活,可以随意地修改XML文档的内容,但耗费的内存比较多,适合处理较小的XML文件。

四、使用expat解析XML文件的实例

下面以使用expat解析XML文件为例,具体步骤如下:

1. 安装expat解析库

在Linux系统中使用以下命令安装:

“`shell

sudo apt-get install libexpat1-dev

“`

2. 编写代码

“`c++

#include

#include

#include

static void XMLCALL start_element(void *data, const char *element, const char **attribute) {

printf(“Start element: %s\n”, element);

}

static void XMLCALL end_element(void *data, const char *element) {

printf(“End element: %s\n”, element);

}

static void XMLCALL handle_data(void *data, const char *text, int length) {

char *ref = (char*)malloc(length+1);

strncpy(ref, text, length);

ref[length] = ‘\0’;

printf(“Data: %s\n”, ref);

}

int mn(int argc,char **argv) {

XML_Parser parser = XML_ParserCreate(NULL);

XML_SetElementHandler(parser, start_element, end_element);

XML_SetCharacterDataHandler(parser, handle_data);

char buffer[BUFSIZ];

FILE *fp = fopen(argv[1], “r”);

int len = 0;

while(len=fread(buffer, 1, sizeof(buffer), fp)) {

XML_Parse(parser, buffer, len, len

}

fclose(fp);

XML_ParserFree(parser);

return 0;

}

“`

在此代码中,XMLCALL是expat库的回调函数,主要可以触发在XML解析过程中的节点事件,并进行处理。start_element函数是在解析标签开始时被触发,end_element函数是在解析标签结束时被触发,而handle_data函数则是在解析文本内容时被触发。

3. 编译和执行代码

在Linux系统中使用以下命令完成编译和执行:

“`shell

gcc -o parser-expat parser-expat.c -lexpat

./parser-expat example.xml

“`

在执行结果中,将会得到XML文件中的所有标签、属性以及标签内的文本内容。如果需要进一步处理XML文件中的数据,可根据实际情况进行二次开发。

五、

相关问题拓展阅读:

  • linux下的xml文件怎么看
  • 详细的xml解析
  • <a href="#求大神回答,关于Linux系统下,java对标签的解析问题” title=”求大神回答,关于Linux系统下,java对标签的解析问题”>求大神回答,关于Linux系统下,java对标签的解析问题

linux下的xml文件怎么看

直接 vim .xml

然后 按 i 就可以插入字符了

修改完了按 :wq 保存退出

注意如果权限不够应该用 sudo vim .xml

cat .xml

详细的xml解析

XML(eXtensible Markup Language)即可扩展标记语言,它与HTML一样,都是处于SGML,标准通用语言。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档缺裤信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。

XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML仅仅是展示数据。事实上XML与其他数据表现形式更大的不同是:他极其简单。这是一个看上去有点琐细的优点,但正是这点使XML与众不同。

XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS, Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。

XML的前身是SGML(The Standard Generalized Markup Language),是自IBM从60年代就开始发展的GML(Generalized Markup Language)

同HTML一样, XML (可扩展标识语言)是通用标识语言标准(SGML)的一个子集,它是描述网络上的数据内容和结构的标准。尽管如此,XML不象HTML,HTML仅仅提供了在页面上显示信息的通用方法(没有上下文相关和动态功能) ,XML则对数据赋予上下文相关功能,它继承了SGML的大部分功能,却使用了不太复杂的技术。.

为了使得SGML显得用户友好,XML重新定义了SGML的一些内部值和参数,去掉了大量的很少用到的功能,这些繁杂的功能使得SGML在设计网站时显得复杂化。XML保留了SGML的结构化功能,这样就使得网站设计者可以定义自己的文档类型,XML同时也推出一种新型文档类型,使得开发者也可以不必定义文档类型。

因为XML是W3C制定的,XML的标准化工作由W3C的XML工作组负责,该小组成员由来自各个地方和行业的专家组成,他们通过email交流对XML标准的意见,并提出自己的看法 (

www.w3.org/TR/WD-xml

)。因为XML 是个公共格式, (它不专樱扮乱属于任何一家公司),你不必担心XML技术会成为少数公司的盈利工具,XML不是一个依附于特定浏览器的语言

XML(可扩展标记语言)是从称为SGML(标准通用标记语言)的更加古老的语言派生出来的。SGML的主要目的是定义使用标签来表示数据的标记语言的语法。

标签由包围在一个小于号()之间的文本组成,例如。起始标签(start tag)表示一个特定区域的开始,例如;结束标签(end tag)定义了一个区域的结束,除了在小于号之后紧跟着一个斜线(/脊档)外,和起始标签基本一样,例如。SGML还定义了标签的特性(attribute),它们是定义在小于号和大于号之间的值,例如中的src特性。如果你觉得它看起来很熟悉的话,应该知道,基于SGML的语言的最著名实现就是原始的HTML。

SGML常用来定义针对HTML的文档类型定义(DTD),同时它也常用于编写XML的DTD。SGML的问题就在于,它允许出现一些奇怪的语法,这让创建HTML的解析器成为一个大难题:

1 某些起始标签不允许出现结束标签,例如HTML中—-pic—标签。包含了结束标签就会出现错误。

2 某些起始标签可以选择性出现结束标签或者隐含了结束标签,例如HTML中标签,当出现另一个标签或者某些其他标签时,便假设在这之前有一个结束标签。

3 某些起始标签要求必须出现结束标签,例如HTML中标签。

4 标签可以以任何顺序嵌套。即使结束标签不按照起始标签的逆序出现也是允许的,例如,This is a sample string是正确的。

5 某些特性要求必须包含值,例如—-pic—中的src特性。

6 某些特性不要求一定有值,例如

中的nowrap特性。

7 定义特性的两边有没有加上双引号都是可以的,所以—-pic—和—-pic—都是允许的。

这些问题使建立一个SGML语言的解析器变成了一项艰巨的任务。判断何时应用以上规则的困难导致了SGML语言的定义一直停滞不前。以这些问题作为出发点,XML逐渐步入我们的视野。

XML去掉了之前令许多开发人员头疼的SGML的随意语法。在XML中,采用了如下的语法:

8 任何的起始标签都必须有一个结束标签。

9 可以采用另一种简化语法,可以在一个标签中同时表示起始和结束标签。这种语法是在大于符号之前紧跟一个斜线(/),例如。XML解析器会将其翻译成。

10 标签必须按合适的顺序进行嵌套,所以结束标签必须按镜像顺序匹配起始标签,例如this is a sample string。这好比是将起始和结束标签看作是数学中的左右括号:在没有关闭所有的内部括号之前,是不能关闭外面的括号的。

11 所有的特性都必须有值。

12 所有的特性都必须在值的周围加上双引号。

这些规则使得开发一个XML解析器要简便得多,而且也除去了解析SGML中花在判断何时何地应用那些奇怪语法规则上的工作。仅仅在XML出现后的前六年就衍生出多种不同的语言,包括MathML、SVG、RDF、RSS、SOAP、XSLT、XSL-FO,而同时也将HTML改进为XHTML。

如果需要关于SGML和XML具体技术上的对比,请查看W3C的注解,位于:

org/TR/NOTE-sgml-xml.html

如今,XML已经是世界上发展最快的技术之一。它的主要目的是使用文本以结构化的方式来表示数据。在某些方面,XML文件也类似于数据库,提供数据的结构化视图。这里是一个XML文件的例子:

每个XML文档都由XML序言开始,在前面的代码中的之一行便是XML序言,。这一行代码会告诉解析器和浏览器,这个文件应该按照前面讨论过的XML规则进行解析。第二行代码,,则是文档元素(document element),它是文件中最外面的标签(我们认为元素(element)是起始标签和结束标签之间的内容)。所有其他的标签必须包含在这个标签之内来组成一个有效的XML文件。XML文件的第二行并不一定要包含文档元素;如果有注释或者其他内容,文档元素可以迟些出现。

范例文件中的第三行代码是注释,你会发现它与HTML中使用的注释风格是一样的。这是XML从SGML中继承的语法元素之一。

页面再往下的一些地方,可以发现标签里有一些特殊的语法。代码用于表示无需进行解析的文本,允许诸如大于号和小于号之类的特殊字符包含在文本中,而无需担心破坏XML的语法。文本必须出现在之间才能合适地避免被解析。这样的文本称为Character Data Section,简称CData Section。

下面的一行就是在第二本书的定义之前的:

虽然它看上去很像XML序言,但实际上是一种称为处理指令(processing instruction)的不同类型的语法。处理指令(以下简称PI)的目的是为了给处理页面的程序(例如XML解析器)提供额外的信息。PI通常情况下是没有固定格式的,唯一的要求是紧随之一个问号必须至少有一个字母。在此之后,PI可以包含除了小于号和大于号之外的任何字符串序列。

最常见的PI是用来指定XML文件的样式表:

这个PI一般会直接放在XML序言之后,通常由Web浏览器使用,来将XML数据以特殊的样式显示出来。

历史

XML是从1996年开始有其雏形,并向 W3C(全球信息网联盟)提案,而在1998二月发布为W3C的标准(XML1.0)。 XML的前身是SGML(The Standard Generalized Markup Language),是自IBM从60年代就开始发展的 GML(Generalized Markup Language)标准化后的名称。

GML的重要概念:

文件中能够明确的将标示与内容区隔

所有文件的标签使用方法均一致

1978年,ANSI将GML加以整理规范,发布成为SGML,1986年起为 ISO 所采用(ISO 8879),并且被广泛地运用在各种大型的文件计划中,但是SGML是一种非常严谨的文件描述法,导致过于庞大复杂(标准手册就有500多页),难以理解和学习,进而影响其推广与应用。

于是,人们对SGML进行了简化衍生出 HTML。HTML 简单,在初期没有任何定义文档外观的相关方法,仅用来在浏览器里显示网页文件。而后,随着因特网的发展,人们为了控制其文件样式,扩充了描述如何显现数据的卷标。在 Netscape 与 Microsoft 之间的浏览器大战后,HTML 标准权威性遭受重大的考验,所幸,到了HTML 4.0时,W3C 又恢复了其地位。

同时W3C意识到HTML的原罪:

不能解决所有解释数据的问题 – 像是影音文件或化学公式、音乐符号等其它型态的内容。

效能问题 – 需要下载整份文件,才能开始对文件做搜寻的动作。

扩充性、弹性、易读性均不佳。

为了解决以上问题,专家们使用SGML精简制作,并依照HTML的发展经验,产生出一套使用上规则严谨,但是简单的描述数据语言:XML。 XML是在一个这样的背景下诞生的—是不是能有一个更中立的方式,让消费端自行决定要如何消化、呈现从服务端所提供的信息?

而XML目的即在于提供一个对信息能够做精准描述的机制,藉以弥补 HTML 太过于表现导向的特质。

用途

丰富文件(Rich Documents)- 自定文件描述并使其更丰富

属于文件为主的XML技术应用

标记是用来定义一块数据应该如何呈现

解释数据(Metadata)- 描述其它文件或在线信息

属于数据为主的XML技术应用

标记是用来说明一块资料的意义

<h3 id="求大神回答,关于Linux系统下,java对标签的解析问题”>求大神回答,关于Linux系统下,java对标签的解析问题

linux本身应该没有什么限制和配置,和首核应该是唤掘你使芹扰用的jar包可能不支持,为什么不用dom4j试试呢?

关于linux中对xml解析的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux环境下XML解析技术详解 (linux中对xml解析)