首頁 後端開發 php教程 用PHP与XML联手进行网站开发_PHP

用PHP与XML联手进行网站开发_PHP

Jun 01, 2016 pm 12:29 PM
parser xml 標記 解析 進行

一、小序

  HTML简单易学又通用,一般的PHP程序就是嵌入在HTML语言之中实现的。但是随着WEB越来越广泛的应用,HTML的弱点也越来越明显了。XML的出现,弥补了这些不足,它提供了一个能够处理互联网上全部数据的通用方法。

  二、HTML的局限性分析

  1、 HTML的可扩展性差。虽然作为一般的应用,HTML应经够用了,但是在处理数学和化学等符号时,HTML有明显的缺点,而且它无法进行扩展,这样使它的发展收到了极大的限制。

  2、 链路丢失后不能自动纠正。由于Web页面的URL地址经常改变,而在改变URL地址时必须手工修改这些信息,否则就会遇到“404URL地址未找到”的信息,这大大加重了Web页面的维护工作量。

  3、 数据搜索的时间长。由于HTML主要用来对网页的显示进行控制,导致了同一个数据在不同的网页中有不同的存储格式,这样在进行数据搜索时就无法快速找到所需的资料。

  4、 HTML对双字节或者多国文字的支持不够。例如中文信息页面在不同的平台下会出现无法显示等问题。

  正是由于这些缺点,人们研究了能够代替HTML的Web页面制作语言。其中已经投入使用的有:可扩展标记语言XML、层叠样式表(CSS)以及动态HTML(DHTML)等。

  三、XML的组成

  这里简要列举几种主要的XML技术:

  1、 DTD(文档类型声明)

  DTD的主要功能是定义XML的内容模式;限制XML标记的数据范围;定义属性的数据类型。但由于它不是用XML编写的,因此扩展性比较差;而且只提供了有限的几种数据类型,因此它的作用是有限的。

  2、 XML Schema

  XML Schema的作用和DTD类似。但不同的是,Schema文件所描述的是引用它的XML文件中的元素和属性的具体类型。另外,由于它是由XML编写的,Schema和DTD相比较还有以下优点:

  ·XML Schema内容模型是开放的,可以随意扩充,而DTD无法解析扩充的内容。

  ·DTD只能把内容类型定义为一个字符串,而XML Schema允许把内容类型定义为整型、浮点型、布尔型或者许多其它的简单数据类型。

  ·XML Schema利用Namespaces将文档中特殊的节点与Schema相联系,一个XML文件可以有多个对应的Schema,而一个XML文件只能有一个DTD。

  3、 XLink

  作为一种Web语言,XML的链接能力是非常重要的。XML的链接和定址机制包括XLink、XPath和XPointer。XLink提供功能强大的链接方法,可以在文档之间建立单向或多向的复杂联结关系,还有注释链接、概要链接、扩展链接集等多种链接功能。XPath在XSLT和XPointer中使用,支持在XML文档中相对于节点和节点集的定位。XPointer在XPath的基础上提供对XML文档的内容的内部结构(如一个字符串或者选择的一个段落)的定位。XML的链接能力比HTML有了很大的增强。

  4、 CSS与XSL

  XML的一大特点就是内容与格式分离,也就是说,XML文档中并不包含如何显示/表示文档的信息。CSS与XSL(XML Style Language)解决了XML文档的显示问题。

  CSS(层叠样式表)也可以用在HTML和XML中。XSL完全使用XML的语法,功能比CSS要强大得多。

  5、 DOM

  文档对象模型(DOM)是一个与平台、语言无关的程序接口,它提供了动态访问和更新文档的内容、结构与风格的手段。可以对文当作进一步的处理,并将处理的结果更新到表示页面。   DOM的目标就是为XML和HTML定义一个标准的编程接口,它包括核心、HTML和XML三部分。DOM的核心部分建立了一套底层的对象集,它们可以表示任何结构化的文档。HTML和XML提供了高层的接口,可以作为更方便的文档视图。DOM规范由对象和方法组成。程序员使用它们可以更容易地对特定类型的文档进行访问和操作。

  6、 Namespaces

  Namespaces是用URL加以区别的、在XML文件的元素和属性中出现的所有名称的集合。在XML中,用户可以自己定义标记和元素。因此,如果把多个XML文件合并为一个,就很可能出现冲突。Namespaces则解决了这个问题。

  四、PHP对XML的支持

  PHP对XML提供了的强大的支持。它使用了一个XML的“解析器”,并且为了支持这个解析器,它提供了20(PHP4)个XML的解析函数。下面是几个最常用的PHP解析函数。

  1. xml_parse

boolean xml_parse(int parser, string data, int [isFinal]);

  本函数用来解析 XML 格式的文件资料。参数 parser 为解析代码。参数 data 为解析的资料区块 (chunk)。参数 isFinal 可省略,若设为 true 则系统会自动送出最后的资料部分 (piece) 给 data 参数。若无错误则返回 true 值。

  2. xml_parser_create

int xml_parser_create(string [encoding]);

  本函数用来初始化一个新的 XML 解析器。参数 encoding 可省略,为 XML 使用的字符集,默认值为 ISO-8859-1,其它尚有 US-ASCII、UTF-8 二种。成功则返回 parser 代码供其它函数使用,失败则返回 false 值。

  3. xml_set_element_handler

boolean xml_set_element_handler(int parser, string startElementHandler, string endElementHandler);

  本函数配置元素的标头供 xml_parse() 函数使用。参数 parser 为解析代码。参数 startElementHandler 及 endElementHandler 分别为元素开始与结束的标头,其中的 startElementHandler 必须包括解析代码、名称、与属性,而 endElementHandler 参数包括了解析代码及名称二个参数。若无错误则返回 true 值。

  4. xml_set_character_data_handler

boolean xml_set_character_data_handler(int parser, string handler);

  本函数配置字符资料的标头。参数 parser 为解析代码。参数 handler 包括解析代码及资料字符串等二个元素。若无错误则返回 true 值。

  5. xml_get_error_code

int xml_get_error_code(int parser);

  本函数可取得 XML 在处理时的错误代码。参数 parser 为解析代码。若 parser 有错则返回 false 值,否则就返回错误代码 (如 XML_ERROR_BINARY_ENTITY_REF .... 等等)。

  6. xml_error_string

string xml_error_string(int code);

  本函数可取得 XML 在处理时的错误代码。参数 code 为解析错误代码。若无错误返回值为代码的文字描述字符串。

  7. xml_get_current_line_number

int xml_get_current_line_number(int parser);

  本函数用来取得目前 XML 解析所正在处理的行号。参数 parser 为解析代码。若 parser 有错则返回 false 值,若无错误则返回行号数字。

  8. xml_parser_free

boolean xml_parser_free(int parser);

  本函数用来释放目前 XML 解析所使用的内存。参数 parser 为解析代码。若没有错误则返回 true 值,否则返回 false 值。

  五、案例解析

  以下是用PHP5实现读取一个以XML 1.0格式编写的通讯录address.xml,并显示其内容的示例。详解见有关注释。

<?
 //
 //第一部分:几个PHP Helper函数
 //

 /**********************************

 *从一个文件中读取XML的 *
 *内容到字符串中 *

 *********************************/

function read_file($filename)
{
 //读取文件
 $lines=file($filename);
 //变量$contents是存放文件内容的变量
 $contents=;
 while(list($key,$value)=each($lines))
 {
  $contents.=$value;
 }
 return $contents;
}

/*********************************
*当PHP遇到一个XML的起始标记时 *
*调用,其作用是按照一定的层次 *
*显示出XML的标记 *
*********************************/

function start_element($parser, $name, $attrs)
{
 //变量$depth存放标记的深度
 global $depth;
 //变量$spacer存放标记前所有的箭头符号
 $spacer=;
 for ($i=1;$i<$depth[$parser];$i )
 {
  $spacer.=->;
 }
 //设置标记显示时的颜色
 if($depth[$parser]==0)
 {
  $font_color=red;
 }
 else
  if($depth[$parser]==1)
  {
   $font_color=green;
  }
 else
 {
  $font_color=blue;
 }
 //设置标记显示时的字体
 $font_size=5-$depth[$parser];
 if ($font_size<2)
 {
  $font_size=2;
 }
 //显示标记
 echo <font size=.$font_size. color=.$font_color.>;
 echo $spacer.$depth[$parser];
 if ($depth[$parser]<>0)
 {
  echo 、;
 }
 echo $name.<BR>;
 echo </font>;
 $depth[$parser] ;
 //如果是主标记就显示红色的水平线
 if($depth[$parser]==2)
 {
  echo <hr color=red size=1>;
 }
}

/*********************************
*当PHP遇到一个XML的结束标记时 *
*调用,其作用是改变当前的层次 *
*计数,并在主标记下显示水平线 *
*********************************/

function stop_element($parser,$name)
{
 //变量$depth存放标记的深度
 global $depth;
 $depth[$parser]--;
 //如果是主标记就显示红色的水平线
 if($depth[$parser]==2)
 {
  echo <hr color=red size=1>;
 }
}

/*********************************
*当PHP遇到一个XML的标记内容时 *
*调用,其作用是按照一定的层次 *
*显示出标记的内容 *
*********************************/

function char_data($parser,$data)
{
 //变量$depth存放标记的深度
 global $depth;
 //显示标记的内容
 $data=trim($data);
 if (strlen($data))
 {
  for ($i=1;$i<$depth[$parser] 6;$i )
   echo  
   echo <b>$data</b><br>\\n;
 }
}

//
//第二部分:PHP文件开始执行处
//
//要解析的XML文件的名字

$file=address.xml;
//读取文件
$data=read_file($file);

// 产生解析器的实例
$parser = xml_parser_create();
// 设置处理函数
xml_set_element_handler($parser, start_element, stop_element);
xml_set_character_data_handler($parser, char_data);
// 解析文件
if(!xml_parse($parser,$data,1))
{
 //报错
 die(sprintf(XML error: %s at line %d,
 xml_error_string(xml_get_error_code($parser)),
 xml_get_current_line_number($parser)));
}

// 释放解析器
xml_parser_free($parser);
?>
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

掃雷怎麼標記? -掃雷怎麼更改難度? 掃雷怎麼標記? -掃雷怎麼更改難度? Mar 18, 2024 pm 06:34 PM

掃雷怎麼標記?首先,我們需要熟悉掃雷遊戲中的標記方式。通常情況下,掃雷遊戲中有兩種常見的標記方式:旗子標記和問號標記。旗子標記用來表示該方塊中有地雷,是一種確定性的標記;而問號標記則表示該方塊可能存在地雷,但並非確定性。這兩種標記方式在遊戲中起著重要的作用,幫助玩家推斷哪些方塊可能存在地雷,從而有效地進行下一步操作。熟練運用這些標記方式可以提高玩家在掃雷遊戲中的成功率,並降低踩雷的風險。因此,在玩掃雷遊戲時,掌握好旗子標記和問號標記的當玩家不能確定某一個方格是否有地雷時,可以使用問號標記來進行標記

百度地圖怎麼標記多個地點 標記多個地點方法 百度地圖怎麼標記多個地點 標記多個地點方法 Mar 15, 2024 pm 04:28 PM

上面的功能非常的多,尤其是對於在地圖方面可以標記到多個地方的一些為止,我們在知道一些地方的時候,肯定是採用標點的一些功能,這樣就可以為你們帶來多種不同方面的一些功能,你們所標點都會產生距離的差異,也就是可以知道距離究竟有多遠,當然也會顯示出上面地點的的一些名稱和詳細的信息都可以,但是很多網友們可能對於上面的一些內容資訊都不是非常的清楚,所以為了能夠讓大家們更好的進行多方面的一些選擇,所以今日小編就來給你們帶來多種不同方面的一些選擇,所以有興趣想法的朋友們,你也有興趣的話,就來試試看。  標

Oracle錯誤3114詳解:如何快速解決 Oracle錯誤3114詳解:如何快速解決 Mar 08, 2024 pm 02:42 PM

Oracle錯誤3114詳解:如何快速解決,需要具體程式碼範例在Oracle資料庫開發與管理過程中,我們常常會遇到各種各樣的錯誤,其中錯誤3114是比較常見的一個問題。錯誤3114通常表示資料庫連線出現問題,可能是網路故障、資料庫服務停止、或連接字串設定不正確等原因導致的。本文將詳細解釋錯誤3114的產生原因,以及如何快速解決這個問題,並附上具體的程式碼

百度地圖如何標記-百度地圖標記的具體操作 百度地圖如何標記-百度地圖標記的具體操作 Mar 04, 2024 pm 08:46 PM

你們電腦中是不是也在使用百度地圖軟體呢?不過你們知道百度地圖如何標記嗎?下面這篇文章就為大夥帶來了百度地圖標記的具體操作,讓我們一同來下文看看吧。進入百度地圖後點擊右上角選擇地區,如圖選擇好地區後在地圖中選擇工具,如圖在地圖中選擇標記,如圖標記,自己想要標記的地圖,在這裡我們以北京市西城區前青廠胡同33號為例,如圖直接選擇保存就好了,如圖

解析Wormhole NTT:適用於任何Token的開放框架 解析Wormhole NTT:適用於任何Token的開放框架 Mar 05, 2024 pm 12:46 PM

Wormhole在區塊鏈互通性方面處於領先地位,專注於創建有彈性、面向未來的去中心化系統,優先考慮所有權、控制權和無需許可的創新。這個願景的基礎是對技術專業知識、道德原則和社群一致性的承諾,旨在以簡單、清晰和廣泛的多鏈解決方案套件重新定義互通性格局。隨著零知識證明、擴容方案和功能豐富的Token標準的興起,區塊鏈變得更加強大,而互通性也變得越來越重要。在這個不斷創新的應用程式環境中,新穎的治理系統和實用功能為整個網路的資產帶來了前所未有的機會。協議建構者現在正在努力思考如何在這個新興的多鏈

PHP 中點的意思和用法解析 PHP 中點的意思和用法解析 Mar 27, 2024 pm 08:57 PM

【PHP中點的意義和用法解析】在PHP中,中點(.)是常用的運算符,用來連接兩個字串或物件的屬性或方法。在本文中,我們將深入探討PHP中點的意義和用法,並透過具體的程式碼範例加以說明。 1.連接字串中點運算子.在PHP中最常見的用法是連接兩個字串。透過將.放置在兩個字串之間,可以將它們拼接在一起,形成一個新的字串。 $string1=&qu

Win11新功能解析:跳過登入微軟帳號的方法 Win11新功能解析:跳過登入微軟帳號的方法 Mar 27, 2024 pm 05:24 PM

Win11新功能解析:跳過登入微軟帳號的方法隨著Windows11的發布,許多用戶發現其帶來了更多的便利性和新功能。然而,有些用戶可能不喜歡將其係統與微軟帳戶綁定,希望跳過這一步驟。本文將介紹一些方法,幫助使用者在Windows11中跳過登入微軟帳戶,並實現更私密、更自主的使用體驗。首先,讓我們來了解為什麼有些用戶不願意登入微軟帳號。一方面,一些用戶擔心他們

如何使用 PHP 函數處理 XML 資料? 如何使用 PHP 函數處理 XML 資料? May 05, 2024 am 09:15 AM

使用PHPXML函數處理XML資料:解析XML資料:simplexml_load_file()和simplexml_load_string()載入XML檔案或字串。存取XML資料:利用SimpleXML物件的屬性和方法來取得元素名稱、屬性值和子元素。修改XML資料:使用addChild()和addAttribute()方法新增元素和屬性。序列化XML資料:asXML()方法將SimpleXML物件轉換為XML字串。實戰案例:解析產品饋送XML,提取產品信息,轉換並將其儲存到資料庫中。

See all articles