目次
一、XML 元素结构例程
二、XML 标签映射例程
三、XML 外部实体例程
四、XML解析器函数
ホームページ バックエンド開発 XML/RSS チュートリアル PHP拡張のXML操作(3) - XMLパーサーの使い方と関連機能

PHP拡張のXML操作(3) - XMLパーサーの使い方と関連機能

Feb 13, 2017 pm 03:02 PM
PHP拡張子 XML操作



一、XML 元素结构例程

第一个例程缩进显示文档中的开始元素结构。


Example #1 显示 XML 元素结构


<?php$file = "data.xml";$depth = array();
function startElement($parser, $name, $attrs){
global $depth;
for ($i = 0; $i < $depth[$parser]; $i++) 
{
echo "  ";
}
echo "$name\n";
$depth[$parser]++;
}
function endElement($parser, $name){
global $depth;
$depth[$parser]--;
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
if (!($fp = fopen($file, "r"))) 
{die("could not open XML input");
}
while ($data = fread($fp, 4096)) 
{
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d",xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}xml_parser_free($xml_parser);
?>
ログイン後にコピー


二、XML 标签映射例程

Example #1 将 XML 映射为 HTML


此例程直接地将 XML 标签映射为 HTML 标签。 在“map_array”中未找到的元素将被忽略。 当然,此例程只针对特定的 XML 文档类型起作用。


<?php$file = "data.xml";
$map_array = array("BOLD"     => "B","EMPHASIS" => "I","LITERAL"  => "TT");
function startElement($parser, $name, $attrs){
global $map_array;
if (isset($map_array[$name])) {
echo "<$map_array[$name]>";
}
}
function endElement($parser, $name){global $map_array;
if (isset($map_array[$name])) {
echo "</$map_array[$name]>";}
}
function characterData($parser, $data){
echo $data;
}
$xml_parser = xml_parser_create();
// use case-folding so we are sure to find the tag in 
$map_arrayxml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($file, "r"))) 
{die("could not open XML input");
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));}
}
xml_parser_free($xml_parser);
?>
ログイン後にコピー


三、XML 外部实体例程

此例程用于加亮 XML 代码。举例说明如何使用外部实体引用来包含和解析其他文档, 及处理指令是如何被处理的,及判断处理指令所包含代码是否“可信任”的一种方法

用于此例程的 XML 文档位于此例程的下方( 和 )。


Example #1 外部实体例程


<?php$file = "xmltest.xml";
function trustedFile($file){
// 仅信任本地文件
if (!preg_match("@^([a-z]+)\:\/\/@i", $file)&& fileowner($file) == getmyuid()) {return true;}return false;}
function startElement($parser, $name, $attribs){
echo "&lt;<font color=\"#0000cc\">$name</font>";
if (count($attribs)) {
foreach ($attribs as $k => $v) {
echo " <font color=\"#009900\">$k</font>=\"<fontcolor=\"#990000\">$v</font>\"";}}
echo "&gt;";
}
function endElement($parser, $name){
echo "&lt;/<font color=\"#0000cc\">$name</font>&gt;";
}
function characterData($parser, $data){
echo "<b>$data</b>";
}
function PIHandler($parser, $target, $data){
switch (strtolower($target)) {case "php":global $parser_file;
// 如何要解析的文档是“可信任”的, 则说明可安全// 地执行其内部的 PHP 代码。否则,显示代码内容。
if (trustedFile($parser_file[$parser])) {
eval($data);
} 
else {printf("Untrusted PHP code: <i>%s</i>",htmlspecialchars($data));
}
break;}}
function defaultHandler($parser, $data){
if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {
printf(&#39;<font color="#aa00aa">%s</font>&#39;,htmlspecialchars($data));
} 
else {printf(&#39;<font size="-1">%s</font>&#39;,htmlspecialchars($data));}}
function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId,$publicId) {
if ($systemId) {if (!list($parser, $fp) = new_xml_parser($systemId)) {printf("Could not open entity %s at %s\n", $openEntityNames,$systemId);
return false;}while ($data = fread($fp, 4096)) {if (!xml_parse($parser, $data, feof($fp))) {
printf("XML error: %s at line %d while parsing entity %s\n",xml_error_string(xml_get_error_code($parser)),xml_get_current_line_number($parser), 
$openEntityNames);xml_parser_free($parser);return false;}}xml_parser_free($parser);return true;}return false;}
function new_xml_parser($file){global $parser_file;
$xml_parser = xml_parser_create();xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
xml_set_processing_instruction_handler($xml_parser, "PIHandler");
xml_set_default_handler($xml_parser, "defaultHandler");
xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");
if (!($fp = @fopen($file, "r"))) {return false;}
if (!is_array($parser_file)) {settype($parser_file, "array");}$parser_file[$xml_parser] = $file;
return array($xml_parser, $fp);}
if (!(list($xml_parser, $fp) = new_xml_parser($file))) {die("could not open XML input");}
echo "<pre class="brush:php;toolbar:false">";
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d\n",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));}}
echo "
";echo "parse complete\n"; xml_parser_free($xml_parser); ?>
ログイン後にコピー

Example #2 xmltest.xml

<?xml version=&#39;1.0&#39;?>
<!DOCTYPE chapter SYSTEM "/just/a/test.dtd" [
<!ENTITY plainEntity "FOO entity">
<!ENTITY systemEntity SYSTEM "xmltest2.xml">
]>
<chapter>
 <TITLE>Title &plainEntity;</TITLE>
 <para>
  <informaltable>
   <tgroup cols="3">
    <tbody>
     <row><entry>a1</entry><entry morerows="1">b1</entry><entry>c1</entry></row>
     <row><entry>a2</entry><entry>c2</entry></row>
     <row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>
    </tbody>
   </tgroup>
  </informaltable>
 </para>
 &systemEntity;
 <section id="about">
  <title>About this Document</title>
  <para>
   <!-- this is a comment -->
   <?php echo &#39;Hi!  This is PHP version &#39; . phpversion(); ?>
  </para>
 </section>
</chapter>
ログイン後にコピー

此文件包含在 中:


Example #3 xmltest2.xml


<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY testEnt "test entity">
]>
<foo>
   <element attrib="value"/>
   &testEnt;
   <?php echo "This is some more PHP code being executed."; ?>
</foo>
ログイン後にコピー

四、XML解析器函数

  • utf8_decode — 将用 UTF-8 方式编码的 ISO-8859-1 字符串转换成单字节的 ISO-8859-1 字符串。

  • utf8_encode — 将 ISO-8859-1 编码的字符串转换为 UTF-8 编码

  • xml_error_string — 获取 XML 解析器的错误字符串

  • xml_get_current_byte_index — 获取 XML 解析器的当前字节索引

  • xml_get_current_column_number — 获取 XML 解析器的当前列号

  • xml_get_current_line_number — 获取 XML 解析器的当前行号

  • xml_get_error_code — 获取 XML 解析器错误代码

  • xml_parse_into_struct — 将 XML 数据解析到数组中

  • xml_parse — 开始解析一个 XML 文档

  • xml_parser_create_ns — 生成一个支持命名空间的 XML 解析器

  • xml_parser_create — 建立一个 XML 解析器

  • xml_parser_free — 释放指定的 XML 解析器

  • xml_parser_get_option — 从 XML 解析器获取选项设置信息

  • xml_parser_set_option — 为指定 XML 解析进行选项设置

  • xml_set_character_data_handler — 建立字符数据处理器

  • xml_set_default_handler — 建立默认处理器

  • xml_set_element_handler — 建立起始和终止元素处理器

  • xml_set_end_namespace_decl_handler — 建立终止命名空间声明处理器

  • xml_set_external_entity_ref_handler — 建立外部实体指向处理器

  • xml_set_notation_decl_handler — 建立注释声明处理器

  • xml_set_object — 在对象中使用 XML 解析器

  • xml_set_processing_instruction_handler — 建立处理指令(PI)处理器

  • xml_set_start_namespace_decl_handler — 建立起始命名空间声明处理器

  • xml_set_unparsed_entity_decl_handler — 建立未解析实体定义声明处理器

以上就是以上就是的内容,更多相关内容请关注PHP中文网(www.php.cn)!的内容,更多相关内容请关注PHP中文网(www.php.cn)!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPでどの拡張子が使用されているかを確認する方法 PHPでどの拡張子が使用されているかを確認する方法 Aug 01, 2023 pm 04:13 PM

PHP で使用されている拡張子を確認するには、phpinfo() 関数の出力を表示し、コマンド ライン ツールを使用して、PHP 構成ファイルを確認します。 1. phpinfo() 関数の出力を表示し、単純な PHP スクリプトを作成し、このスクリプトを phpinfo.php として保存し、Web サーバーにアップロードします。ブラウザでこのファイルにアクセスし、ブラウザの検索機能を使用します。キーワードを探すだけです。ページ上の「extension」または「extension_loaded」で拡張機能に関する情報を見つけます。

php を使用して PDO を拡張し、Oracle データベースに接続する方法 php を使用して PDO を拡張し、Oracle データベースに接続する方法 Jul 29, 2023 pm 07:21 PM

PHP を使用して PDO を拡張し、Oracle データベースに接続する方法 はじめに: PHP は非常に人気のあるサーバー側プログラミング言語であり、Oracle は一般的に使用されるリレーショナル データベース管理システムです。この記事では、PHP 拡張機能 PDO (PHPDataObjects) を使用して Oracle データベースに接続する方法を紹介します。 1. PDO_OCI 拡張機能のインストール Oracle データベースに接続するには、まず PDO_OCI 拡張機能をインストールする必要があります。 PDO_OCI 拡張機能をインストールする手順は次のとおりです。

PHP を使用して SuiteCRM のレポート生成機能を拡張する方法 PHP を使用して SuiteCRM のレポート生成機能を拡張する方法 Jul 19, 2023 am 10:27 AM

PHP を使用して SuiteCRM のレポート生成機能を拡張する方法 SuiteCRM は、企業が顧客関係を管理するのに役立つ豊富な機能を提供する強力なオープンソース CRM システムです。重要な機能の 1 つはレポート生成であり、レポートを使用することにより、企業はビジネス状況をより深く理解し、正しい意思決定を行うことができます。この記事では、PHP を使用して SuiteCRM のレポート生成機能を拡張する方法と、関連するコード例を紹介します。開始する前に、SuiteCRM がインストールされていることを確認する必要があります。

PHP 入門: PHP 拡張機能のインストール PHP 入門: PHP 拡張機能のインストール May 20, 2023 am 08:49 AM

PHP を使用して開発する場合、いくつかの PHP 拡張機能を使用する必要がある場合があります。これらの拡張機能により、より多くの機能とツールが提供され、開発作業がより効率的かつ便利になります。ただし、これらの拡張機能を使用する前に、まずインストールする必要があります。この記事では、PHP 拡張機能をインストールする方法を紹介します。 1. PHP 拡張機能とは何ですか? PHP 拡張機能は、PHP プログラミング言語に追加の機能とサービスを提供するコンポーネントを指します。これらのコンポーネントは、PHP の拡張メカニズムを通じてインストールして使用できます。 PHP 拡張機能が役立つ

PHP の geoip 拡張機能を使用するにはどうすればよいですか? PHP の geoip 拡張機能を使用するにはどうすればよいですか? Jun 01, 2023 am 09:13 AM

PHP は、Web ページ上の動的コンテンツを処理できる一般的なサーバー側スクリプト言語です。 PHP の geoip 拡張機能を使用すると、PHP でユーザーの位置に関する情報を取得できます。この記事では、PHP の geoip 拡張機能の使用方法について説明します。 PHP の GeoIP 拡張機能とは何ですか? PHP の geoip 拡張機能は、IP アドレスと位置情報に関するデータを取得できる無料のオープンソース拡張機能です。この拡張機能は、MaxMin によって開発されたデータベースである GeoIP データベースで使用できます。

PHP 拡張機能と Pagoda パネルの PHP バージョン管理 PHP 拡張機能と Pagoda パネルの PHP バージョン管理 Jun 21, 2023 am 08:49 AM

Pagoda Panel はオープンソースのサーバー管理パネルで、Web サイト運営者に便利な Web サイト管理、データベース管理、SSL 証明書管理などのサービスを提供するとともに、強力な PHP 拡張機能と PHP バージョン管理機能も提供し、サーバー管理を容易にします。効率的。 1. PHP 拡張機能 PHP 拡張機能は、PHP の機能を拡張するためのモジュールです。PHP 拡張機能をインストールすることで、次のような機能やサービスを実装できます。

PHP 拡張機能開発の徹底調査: PHP 拡張機能開発の舞台裏の秘密を明らかにする PHP 拡張機能開発の徹底調査: PHP 拡張機能開発の舞台裏の秘密を明らかにする Feb 19, 2024 pm 11:40 PM

PHP 拡張機能の開発は、カスタム機能を作成し、PHP コア機能を拡張し、より強力なアプリケーションを構築する技術です。これは PHP の世界に新たな可能性をもたらし、開発者が言語の基本的な制限を超えることができるようにします。この記事では、PHP 拡張機能の開発の旅へお連れし、基本的な概念から高度なテクニックまで、包括的な知識と実践的なガイダンスを提供します。 PHP 拡張機能開発の基本 PHP 拡張機能開発を開始する前に、いくつかの基本概念を理解する必要があります。 PHP拡張機能とは何ですか? PHP 拡張機能は、PHP のコア機能を拡張し、新しいデータ型、関数、クラスを提供するダイナミック リンク ライブラリ (DLL) です。 PHP 拡張機能の利点 PHP 拡張機能には、スケーラビリティ、柔軟性、パフォーマンスの最適化、コードの再利用など、多くの利点があります。 PHP

完全なチュートリアル: 画像生成に PHP 拡張機能 GdImage を使用する方法 完全なチュートリアル: 画像生成に PHP 拡張機能 GdImage を使用する方法 Jul 28, 2023 am 11:41 AM

完全なチュートリアル: 画像生成に PHP 拡張機能 GdImage を使用する方法 はじめに: 画像生成は、Web サイト開発における一般的な要件です。たとえば、検証コード、サムネイル、グラフィック統計などを生成します。 PHP には画像を処理するための拡張ライブラリが多数用意されており、最もよく使用される拡張ライブラリの 1 つが GdImage です。このチュートリアルでは、GdImage 拡張機能を使用して画像を生成する方法を詳しく説明し、関連するコード例を示します。ステップ 1: GdImage 拡張機能をインストールする. GdImage 拡張機能を使用するには、まず拡張機能がインストールされていることを確認する必要があります。

See all articles