|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我的文章不会对您的学习起到实质性的作用,您能否成功,还得靠自己的,坚持,坚持,再坚持,就是步入成功的不二法门。xml 现在人人宣传XML是Web开辟者最好的伴侣,有了XML的协助,后者便可轻松地格局化和显示来自几近任何数据源的数据。然而,对静态内容而言,格局优秀的数据却还远远谈不上到达幻想形态。大多半的Web开辟者城市告知你,明天的收集上没有静态内容怎样能行!成绩是:“究竟该若何用XML创立静态内容呢?”
谜底是用静态内容处置言语来解析XML,好比用PHP或Perl等,从实际上说,这类法式言语是可以出于各类目标使用XML的。不过是采取一些能解析XML的东西包罢了。James Clark就供应了一种名叫expat的东西包。expat XML东西包用C言语解析XML,令PHP与XML轻松共舞。
PHP是一种专为Web设计的绝佳剧本言语。XML是暗示Web内容的尺度。二者联手真是要多美有多美!
上面我会给读者演示一个复杂的示例,经由过程这个例子便可申明若何用PHP把XML文档解析为HTML。然后我会引见一些PHP的其他XML概念。用PHP解析XML很复杂,操作起来很直不雅但却需求对细节有所注释。一旦真正把握了使用的方法,你一定会惊异本人怎样不早想到把它们俩拢一起来。
概述
PHP用expat这类XML东西包,经由过程C言语来解析XML。这个东西包的函数集同Perl XML解析所采取的函数集是一样的,另外,这类东西包仍是事务驱动型的解析器。这就是说,expat把每一个XML标签或新一行代码看成事务的肇端,而事务就是函数的触发器。Expat的装置十分复杂,假如你正在用着Apache Web办事器,那末你可以在PHP XML参考页上找到装置和下载指南。
用PHP解析XML的根基义务是如许的:起首,创立XML解析器的一个实例。接着,界说处置触发事务的函数,好比入手下手或停止标签等。随后,界说实践意义的数据处置法式。最初,翻开XML文件,读取文件数据并解析数据。以后封闭文件释放XML解析器。
你瞧,就像我说的那样,这套操作进程没甚么出格的。不外,在咱们会商详细的示例之前先懂得以下的一些警示:
Expat不合错误XML停止查验。这意味着只需XML文件格局准确――一切的元素嵌套妥当、入手下手和封闭标签没有任何毛病――它就会被解析。Expat可不论XML是不是恪守XML文件头中援用的尺度或界说。
Expat把XML标签全体转换为大写字母。假如你的剧本在标签名和其他内容上巨细写字母混用可就要当心了。
PHP是在magic quotes设置启用的情形下编译而成,那末庞杂的XML文件不会失掉准确的解析。如果magic quotes不是默许设置,你就当我没说。
好了,咱们如今就来看看有关的示例!
根基示例
为了把庞杂的工作复杂化,我在例子中省略了毛病反省和其他一些不用要的器材,固然,你可以在本人的代码为所欲为。我假定你早就熟习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碰到<url>如许的入手下手标签,“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 “<tr><td><a href=””;
break;
case “SUMMARY” : echo “<td>”;
break;
}
}
处置元素标签以后,xml_parse一旦碰到XML数据就会挪用“characterData”函数。这个函数也是由解析器主动挪用的,该函数需求两个参数,解析器实例和包括数据的字符串。
function characterData($parser_instance, $xml_data) {
echo $xml_data;
}
最初xml_parse遭受停止标签,运转“endElement”函数,该函数带两个参数,解析器实例和元素称号。
function endElement($parser_instance, $element_name) {
switch($element_name) {
case “URL” : echo “”>”;
break;
case “TITLE” : echo “</a></td>”;
break;
case “SUMMARY” : echo “</td></tr>”;
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为中间的天分促使它们结合起来成为静态内容所需的幻想处理计划。
对于PHP的语法结构,刚开始真的很不习惯,真搞不懂为什么每个变量之前都要加个“$”符号,每个语句写完之后都必须加上“分号”来表示此句已经结束,还有,PHP对字母的大小写是敏感的,写的时候一定要注意大小写的区别。 |
|