目次
" + title + "
ホームページ php教程 php手册 PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询

PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询

Jun 06, 2016 pm 08:34 PM
php

XML(可扩展的标注语言)是一种W3C标准,主要用于Web应用程序和服务器之间实现容易的交互、数据的存储与使用

一、 XML简介

  XML(可扩展的标注语言)是一种W3C标准,主要用于Web应用程序和服务器之间实现容易的交互、数据的存储与使用。

  使用XML标准编码的数据具有能容易被人和计算机解释的意义和结构。XML数据是平台和应用程序独立的。不用多说,这本身就使XML成为适合于互联网的一个理想的数据交换格式(事实上,它正是因这一用途而被开发的)。最近,宽带连接的增长及消费者对于越过任何媒体进行数据共享的应用软件的需求意味着,XML Web服务和应用软件正变得越来越丰富。

  XML的发明正是为了解决描述网上丰富的数据的组织问题;而目前为止,这一问题仅能够通过HTML的巧妙使用得到部分地解决。

  下面是一XML文档的实例:
程序代码
代码如下:


 My House
 
 
  John Bloggs
  Crate of Fosters
 

 
  Sara Bloggs
  Umbrella
 

 
  David Fig
  Bombay Mix
 



  如果你以前没见过XML,那么你可以认为它看起来象HTML。HTML是一种SGML应用程序,而XML是它的一个子集。然而,其相似性还包括它们具有相似的标注分隔符。

  仅需看一下上面的XML片断,我们就能看到,该数据是描述一个具有一些客人的聚会;其中,每一个客人相应于一项。用于描述数据的标签名完全由作者来选择。所有XML标准要求:数据必须是一致的并且用于描述数据的标签为良构的。我们可以进一步用一种文档类型声明(DTD)或一个XML模式来强制数据的完整性。然而为简化起见,我们在本文中将仅使用普通的XML。

  二、 XML应用程序

  刚才,我们已经看到了如何使用XML来描述任何种类的数据。事实上,XML已经在今天的许多Web应用程序中得到广泛使用,下面是一些著名的应用描述:

  · XHTML-这是使用最广泛的XML应用程序之一。它类似基于HTML的SGML-用于描述数据在网页上的显示方式。XHTML使用一DTD来确保所有的文档遵循标准。XHTML的出现使Web程序员的开发稍微容易了一些;然而,一种完全兼容于CSS和XHTML标准的web浏览器尚未出现。

  · XML-RPC-远程过程调用(RPC),应用于分布式应用程序中以调用远程计算机上的过程。XML-RPC使用XML对关于过程调用的信息进行编码,并且使用HTTP把它发送到接收计算机。然后,过程的返回值被再次用XML编码并用HTTP连接发送回调用者计算机。

  · RSS-真正简单的聚合/丰富的站点摘要,它是一种用来聚合web站点内容(例如新闻、文章、共享价格和链接等)的方法,它用一个特殊的应用程序(一个聚合器)定期更新用户PC上的RSS回馈。该RSS数据是使用XML进行编码和传输的。

  · AJAX-异步的JavaScript和XML,允许web开发者创建具有丰富特征的事件驱动的运行在web浏览器上的web应用程序。其中,JavaScript用于把XML编码的数据发送到服务器端脚本(或从服务器端接收XML编码的数据),并允许局部的实时的页面更新而不需要更新所有页面内容。

  上面仅仅是XML的可能的应用的一部分。在以后文章中,我们将分析如何在PHP中使用这些应用软件。

  三、 在PHP中使用XML

  自从PHP 5.0以来,PHP能与XML交互的可用选项显著地增加。而PHP版本4所能提供的是不稳定的而且是非w3c兼容的DOM XML扩展。
下面,我将集中讨论PHP 5所提供给我们的三个允许我们与XML交互的方法:DOM,简单XML和XPath。在可能之处,我将建议最适合于每种方法的条件和数据。所有的示例代码将使用XML数据源来描述一个库及其中包含的书。

程序代码
代码如下:


 
  Web Development
  Database Programming
  PHP
  Java
 

 
 
  Apache 2
  Peter Wainwright
  Wrox
  1
 

 
  Advanced PHP Programming
  George Schlossnagle
  Developer Library
  1
  3
 

 
  Visual FoxPro 6 - Programmers Guide
  Eric Stroo
  Microsoft Press
  2
 

 
  Mastering Java 2
  John Zukowski
  Sybex
  4
 





四、 DOM

  DOM PHP扩展名允许使用W3C DOM API在XML文档上进行操作。在PHP 5出现之前,这是PHP能存取XML文档的唯一方法。如果你在JavaScript中使用了DOM,那么会认识到这些对象模型几乎是一样的。

  由于DOM方法在遍历和操作XML文档时比较罗嗦,所以任何DOM兼容的代码都有明显的优点-与任何其它实现相同的W3C兼容的对象模型的API兼容。

  在下面的实例代码中,我们使用DOM来显示关于每本书的信息。首先,我们遍历一下列表目录,把它们的Id和相应的名字装载到一个索引数组中。然后,我们显示每本书的一个简短描述:

  PHP:
代码如下:
 /*这里我们必须指定XML版本:也即是1.0 */
 $xml = new DomDocument('1.0');
 $xml->load('xml/library.xml');
 /*首先,创建一个目录列表*/
 $categories = array();
 $XMLCategories = $xml->getElementsByTagName('categories')->item(0);
 foreach($XMLCategories->getElementsByTagName('category') as $categoryNode) {
  /*注意我们是如何得到属性的*/
  $cid = $categoryNode->getAttribute('cid');
  $categories[$cid] = $categoryNode->firstChild->nodeValue;
 }
?>


XML Library



 php foreach($xml->getElementsBytagName('book') as $book):
 /*查找标题*/
 $title = $book->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
 /*查找作者-为了简化起见,我们假设仅仅有一个作者*/
 $author = $book->getElementsByTagName('author')->item(0)->firstChild->nodeValue;
 /* 列表目录*/
 $bookCategories = $book->getElementsByTagName('category');
 $catList = '';
 foreach($bookCategories as $category) {
  $catList .= $categories[$category->firstChild->nodeValue] . ', ';
 }
 $catList = substr($catList, 0, -2); ?>


Author::


Categories: :



php endforeach; ?>

[html]
  再提一下,修改XML是较麻烦的。例如,添加一个目录的代码如下:

  PHP:
[code]
function addCategory(DOMDocument $xml, $catID, $catName) {
 $catName = $xml->createTextNode($catName); //创建一个结点以存储文本
 $category = $xml->createElement('category'); //创建一个目录元素
 $category->appendChild($catName); //把文本添加到目录元素上
 $category->setAttribute('cid', $catID); //设置目录的ID
 $XMLCategories = $xml->getElementsByTagName('categories')->item(0);
 $XMLCategories->appendChild($category); //添加新目录
}

  五、 保存XML

  你可以使用save()和saveXML()方法之一来把DOM描述转换回XML字符串描述。save()方法用一指定的命名把XML保存到一个文件中,而saveXML()从文档的部分或整体中返回一个字符串。

$xml->save('xml/library.xml');
//保存全部文件
$categories=$xml->saveXML($XMLCategories);
//返回一个包含种类的字符串

  为了说明把DOM兼容的代码移植到另外的语言是如何容易,下面是用JavaScript形式实现的与以上功能相同的代码:

Javascript:
代码如下:
function doXML(){
 /* 首先创建一个种类列表*/
 var categories = Array();
 var XMLCategories = xml.getElementsByTagName('categories')[0];
 var theCategories = XMLCategories.getElementsByTagName('category');
 for (var i = 0; i   /* 注意我们是怎样得到属性的*/
  var cid = theCategories[i].getAttribute('cid');
  categories[cid] = theCategories[i].firstChild.nodeValue;
 }
 var theBooks = xml.getElementsByTagName('book');
 for(var i = 0; i   var book = theBooks[i];
  /* 查找标题*/
  var title = book.getElementsByTagName('title')[0].firstChild.nodeValue;
  /* 查找作者-为简单起见,我们假定仅有一个作者*/
  var author = book.getElementsByTagName('author')[0].firstChild.nodeValue;
  /* 列出种类*/
  var bookCategories = book.getElementsByTagName('category');
  var catList = '';
  for(var j = 0; j    catList += categories[bookCategories[j].firstChild.nodeValue] + ', ';
  }
  catList = catList.substring(0, catList.length -2);
  document.open();
  document.write("

" + title + "

");
  document.write("

Author:: " + author + "

");
  document.write("

Categories: : " + catList + "

");
 }
 document.close();
}

  六、 简单XML

  简单XML确实简单。它允许使用对象和数组存取方法来存取一个XML文档及其元素和属性。操作方式很简单:

  · 元素(Element)-这些被描述为SimpleXMLElement对象的单个属性。当有多个作为文档或元素的子元素存在时,每个元素能被使用数组索引标志加以存取。

$xml->books;//返回元素"books"
$xml->books->book[0];//返回在books元素中的第一本书

  · 属性(Attribute)-元素的属性是通过关联数组标志来存取和设置的,此时每一个索引对应于一个属性名。

$category['cid'];//返回cid属性的值

  · 元素数据(Element Data)-为了检索包含在一个元素内的文本数据,必须使用(string)显式地把它被转换为一个字符串或使用print或echo输出它。如果一个元素包含多个文本结点,那么它们将按被找到的顺序连接起来。

echo ($xml->books->book[0]->title);//显示第一本书的标题

  下面是使用简单XML进行转换的原来的实例。为了装载XML文件,我们使用simplexml_load_file()函数,由它来分析该XML文件并且把它装载进一个SimpleXMLElement对象中:

  PHP:
代码如下:
$xml = simplexml_load_file('xml/library.xml');
/* 把一个列表的目录装载到一个数组中*/
$categories = array();
foreach($xml->categories->category as $category) {
 $categories[(string) $category['cid']] = (string) $category;
}
?>


XML Library


books->book as $book):
/* 列举目录*/
$catList = '';
foreach($book->category as $category) {
 $catList .= $categories[((string) $category)] . ', ';
}
$catList = substr($catList, 0, -2); ?>

title) ?>


Author:: author) ?>


Categories: : php echo($catList) ?>



php endforeach; ?>



七、 修改XML

  尽管文本数据和属性值可以通过使用简单XML加以设置,但是不能新建这些对象。然而,SimpleXM的确提供了一种方法来实现DomElement对象和DomElement对象之间的转换。为此,我修改了addCategory()函数来说明如何使用simplexml_import_dom()函数以添加目录和把该文档转换回简单的XML格式:

  PHP:
代码如下:
function addCategory(SimpleXMLElement &$sXML, $catID, $catName) {
 $xml = new DOMDocument;
 $xml->loadXML($sXML->asXML());
 $catName = $xml->createTextNode($catName); //创建一个结点来存放该文本
 $category = $xml->createElement('category'); //创建一个目录元素
 $category->appendChild($catName); //把文本添加到目录元素
 $category->setAttribute('cid', $catID); //设置目录id
 $XMLCategories = $xml->getElementsByTagName('categories')->item(0);
 $XMLCategories->appendChild($category); //添加新目录
 $sXML = simplexml_import_dom($xml);
 return $sXML;
}

  同样,SimpleXMLElement对象的asXML()函数可以用来检索XML字符串并把它保存回一个文件中。

  八、 xPath

  毫无疑问,Xpath是"XML蛋糕之上的樱桃"。XPath允许你使用象SQL一样的查询来查找一个XML文档中的特定信息。DOM和SimpleXML都有内置的对XPath的支持,如SQL,可以被用来提取你想从一XML文档中提取的任何内容。

  程序代码
 · //category-查找所有的在文档中出现的任何category。

  · /library/books-查找所有作为library的孩子出现的books

  · /library/categories/category[@cid]-查找所有作为library/categories的孩子出现且属性为cid的category。

  · /library/categories/category[@att='2']-查找所有作为library/categories的孩子且具有属性cid的值为2出现的category。

  · /library/books/book[title='Apache 2']-查找所有作为/library/books的孩子且其标题元素有一个值为Apache 2出现的book。

  其实,这仅是xPath冰山之一角。你可以使用xPath来创建大量复杂的查询以便从你的文档中提取几乎任何信息。我再次修改了示例代码来向你展示使用xPath是多么轻松愉快的事情。

  PHP:
代码如下:
$xml = simplexml_load_file('xml/library.xml');
?>


XML Library


xpath("/library/books/book")) as $book):
/*列表目录*/
$catList = '';
foreach($book->category as $category) {
 /*得到具有这个ID的目录*/
 $category = $xml->xpath("/library/categories/category[@cid='$category']");
 $catList .= (string) $category[0] . ', ';
}
$catList = substr($catList, 0, -2); ?>

title) ?>


Author:: author) ?>


Categories: :






  九、 DOM和XPath

  在DOM中计算XPath查询需要创建一个DOMXPath对象,下面的evaluate()函数返回一个DOMElement数组。
代码如下:
$xPath = new DOMXPath($xml);
$xPath->evaluate("/library/books/book[title='Apache 2']");

  十、 结论

  现在,我们学习了如何使用了PHP提供给我们的工具来与XML交互。至此,我们已经被"武装起来"并准备好深入钻研XML应用程序了。在下一篇文章中,我们将讨论AJAX及其如何应用于象Google这样的站点开发的。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles