当前位置:  技术问答>linux和unix

请问谁给个expat处理xml的例子啊?

    来源: 互联网  发布时间:2015-07-31

    本文导语:  我看手册里好象只能读取和修改,没有新添、删除的呢?谢谢指点一二了~ ^_^ | 基本示例 为了把复杂的事情简单化,我在例子中省略了错误检查和其他一些不必要的东西,当然,你可以在自...

我看手册里好象只能读取和修改,没有新添、删除的呢?谢谢指点一二了~ ^_^

|
基本示例

为了把复杂的事情简单化,我在例子中省略了错误检查和其他一些不必要的东西,当然,你可以在自己的代码随心所欲。我假定你早就熟悉PHP及其语法,而我会对XML函数做一番解释。首先我会说明脚本程序的含义,接着定义用户定义函数,实际上这些函数位于引用它们的代码之前。相关附件:程序清单A 所示为脚本的完整代码,脚本要解析的XML文档则是 相关附件:程序清单B。处理之后的输出结果如表A所示。

XML Articles

"Remedial XML for programmers: Basic syntax"            In this first installment in a three-part series, I'll introduce you to XML and its basic syntax.

"Remedial XML: Enforcing document formats with DTDs"            To enforce structure requirements for an XML document, you have to turn to one of XML's attendant technologies, data type definition (DTD).

"Remedial XML: Using XML Schema"            In this article, we'll briefly touch on the shortcomings of DTDs and discuss the basics of a newer, more powerful standard: XML Schemas.

"Remedial XML: Say hello to DOM"            Now it's time to put on your programmer's hat and get acquainted with Document Object Model (DOM), which provides easy access to XML documents via a tree-like set of objects.

"Remedial XML: Learning to play SAX"            In this fifth installment in our Remedial XML series, I'll introduce you to the SAX API and provide some links to SAX implementations in several languages.
 


表A  PHP解析XML的输出结果

首先我创建了XML解析器的一个实例:
$parser = xml_parser_create();

接着,我定义解析器遭遇开始和结束标签时的操作。注意“startElement”和“endElement”是用户定义的函数,当然你可以按照自己的喜好给它们起个其他名字,但我起的这些名字可是标准的习惯要求。
xml_set_element_handler($parser, “startElement”, “endElement”);

然后我定义了数据操作。这里的“characterData”也是用户定义的函数,名字也是习惯性的。
xml_set_character_data_handler($parser, “characterData”);

现在打开文件读取数据。你可以在这里开始编写错误处理代码,我在例子中省略了这些错误处理。不要忘了在脚本的开头定义$xml_file。
$filehandler = fopen($xml_file, “r”);

我开始读取文件内容,一次读4K字节并放在变量“$data”内直到文件末尾。我用xml_parse解析读取的这些数据段。
while ($data = fread($filehandler, 4096)) {
    xml_parse($parser, $data, feof($filehandler));
}

最后进行清空、关闭文件和释放解析器等操作。
fclose($filehandler);
xml_parser_free($parser);

以上就是脚本中所用到的所有XML函数,下面我再具体解释下其中用到的3个用户定义函数,它们就是“startElement”、“endElement”和“characterData”。


|

只要xml_parse遇到这样的开始标签,“startElement”函数就由XML解析器调用,在我们的例子中解析器就是$parser。该函数是必须定义的函数,它拥有3个自动传递给它的参数:XML解析器实例、大写的元素名称,比如URL以及该元素所具有的属性数组。在以上示例中,XML文件中的元素没有属性集合,所以数组参数为空,但这个参数还是必须存在的。

就这个例子而言,我决定在一个HTML表中显示我的XML数据。如上所示,出于简化的缘故我没有编写错误处理代码。这里我耍了个障眼法,因为我知道XML文件中标签出现的顺序。否则我可以用“startElement”、“characterData”和“endElement”函数来定义数组,然后用单独的函数显示结果。

function startElement($parser_instance, $element_name, $attrs) {
    switch($element_name) {
        case “URL”     :    echo “”;
                            break;
        case “TITLE”   :    echo “”;
                            break;
        case “SUMMARY” :    echo “”;
                            break;
   }
}



用PHP解析XML的轻量锻炼到这里就结束了,下面我们开始加些重活。

增加函数

PHP中还有其他一些同XML解析有关的函数。PHP.net文档对这些函数进行了完整的说明。我在这里提到了一些,你或许不久就会用到这些函数:

xml_set_default_handler()—该函数的工作方式和xml_set_character_data_handler()函数相近,但它捕获定义的一切。这个函数常用于文档类型声明控制数据的处理。 
xml_parser_set_option()—你可以用这个函数禁用字母的转大写操作或者选择其他替代的字符编码集。 
xml_parse_into_struct()—这个函数用来略过“startElement”、“characterData”和“endElement”函数的调用,而把数据直接放进数组。 
xml_error_string()—这个函数用来从xml_parser() 错误中获取文本信息。 
xml_get_error_code()—你可以用这个函数获取上面提到的错误字符串。后两个函数的用法是这样的:if(!xml_parse($parser, $data, feof($filehandler))) { die(xml_error_string(xml_get_error_code($parser)); ) 
如果你觉得自己已经上手,我建议你仔细读读PHP手册页中提供的XML External Entity Example。这些例子提出了本文没有提到的其他一些概念以及处理文件错误的某些技术。


小结
本文演示了PHP和XML的紧密结合过程。两种技术以Web为中心的天性促使它们联合起来成为动态内容所需的理想解决方案。

    
 
 

您可能感兴趣的文章:

  • 请问那位大虾有关于EJB(包括Servlet,jsp)的项目例子 100分奉送呀!
  • 请问那里有现成ejb的具体的简单的实际例子?
  • 请问sun的jwsdk的例子中jsp为什么不能使用?
  • 英雄在哪儿?请问如何让WEBLOGIC6.1自带的例子程序跑起来???
  • 请问java里怎么用goto语句??举个例子,好吗?谢谢
  • 请问如何编写代理服务器?最好能给个例子。
  • 各位请问如何linux下安装程序,和windows 比较什么区别,最好给个例子
  • 请问从哪里可以下到UNIX网络编程代码例子里用的包裹函数啊
  • 请问a method能return an exception吗?能写个例子看看吗?
  • 请问:哪里有java所有类包的介绍,用法,及所有类的用途,用法,例子等的书或帮助的下载?
  • 求助:请问各位大侠,哪儿有一个关于开发EJB完整的从发布到运行的例子
  • 请问谁有《java2核心技术 卷I:基础知识》书中例子的源代码?急需!!!
  • 请问图象内容以byte[]形式保存,请看例子,偶不明白其中含义!!
  • 请问Float.NaN什么意思?拿来干什么用?麻烦举个例子说明
  • 请问谁有Applet连接远程Access数据库并且显示数据库内容的例子!
  • 请问网上何处有关于JUnit的使用例子程序?
  • 请问那里有比较好的java写的文字编辑(就好象word)那样的源程序呀?sun的例子除外!
  • 请问applet如何通过javabean访问数据库?给个例子,谢谢
  • 请问:cat -v中的 -v的作用是什么,能举个例子吗?,谢谢
  • ———我是个菜菜鸟:Hello World 例子也不过,请问为啥!————
  • 请问如何在unix批处理中得到批处理参数!read吗?急在线等待!
  • 请问:进程创建的线程是怎样运行的啊,线程的处理函数运行完了,线程就退出了吗?
  • 请问怎么处理这样的NullPointerException???
  • 请问在AIX下面,有什么程序处理后缀为.x的?
  • 请问发送数据成功后返回的ack是在内核的什么地方处理的?
  • 请问,为何咋处理TOMCAT的TOO MANY CONNECTION:3
  • 请问有没有处理.tar或者.gz文件的C/C++库呢?
  • 请问把linux下的二进制数据转到NT下面要做一些什么处理?
  • linux 9.0安装出错请问怎么处理
  • 请问如何在Bean中处理中文?
  • 请问怎么在uclinux下面处理unicode ?????
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问:我知道路由器的telnet密码,但忘记了enable 密码,请问如何是好?
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 请问最新的reahat9.0是基于什么核心的?2.4?2.6?请问那里能下载?
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 请问,我试图用#admintool&图形工具命令来安装sun workshop5.0,为什么进入的却是用户管理界面?请问具体该如何在solaris下安装应用软件
  • 请问在Redhat 9里,我从登录就是图形介面,请问如何在图形介面内进入命令行方式呢,谢谢
  • 请问玩过SOLARIS的高手门,在不正常关机后,就不能启动到windows公用桌面了,只能在命令提示模式下了,请问怎么解决这个问题啊?急~!~!
  • 请问:我在redhat下装了bochs-2.2.1-1.rpm,.装了后,想设置一下,但找不到bochsrc.fda.bxrc,请问这个文件在哪个曰录下啊。
  • 请问:在配置Qt时,很多文档都说在.profile,.login里加东西,但是我好像没有发现有这两个文件上,请问这些文件在哪个目录下啊
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!
  • 主机是WIN2000,我用的是LUNIX,请问是否可以共享上网? 如果可以请问如何设置? 500分答谢,龟儿食言!
  • 请问linux下GUI开发的问题!
  • 请问出现fstab文件丢失该怎么修复呀?
  • WEB前端 iis7站长之家
  • 请问一个奇怪的问题!
  • 请问在网页中打开的新窗口,如何让其居中。
  • 请问我该学什么了
  • 请问安装zhcon,cxterm问题
  • 非常急! 请问daemontools 在red hat 9下的安装问题? 在线等待


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3