Table des matières
一、XML 元素结构例程
二、XML 标签映射例程
三、XML 外部实体例程
四、XML解析器函数
Maison développement back-end Tutoriel XML/RSS Opération XML de l'extension PHP (3) - Utilisation de l'analyseur XML et fonctions associées

Opération XML de l'extension PHP (3) - Utilisation de l'analyseur XML et fonctions associées

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);
?>
Copier après la connexion


二、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);
?>
Copier après la connexion


三、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); ?>
Copier après la connexion

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>
Copier après la connexion

此文件包含在 中:


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>
Copier après la connexion

四、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)!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment vérifier quelles extensions sont utilisées en php Comment vérifier quelles extensions sont utilisées en php Aug 01, 2023 pm 04:13 PM

Vous pouvez vérifier quelles extensions sont utilisées par PHP en affichant le résultat de la fonction phpinfo(), en utilisant les outils de ligne de commande et en vérifiant le fichier de configuration PHP. 1. Affichez le résultat de la fonction phpinfo(), créez un script PHP simple, enregistrez ce script sous phpinfo.php et téléchargez-le sur votre serveur Web. Accédez à ce fichier dans le navigateur et utilisez la fonction de recherche du navigateur. Recherchez simplement le mot-clé. "extension" ou "extension_loaded" dans la page pour trouver des informations sur l'extension.

Comment étendre les capacités de génération de rapports de SuiteCRM à l'aide de PHP Comment étendre les capacités de génération de rapports de SuiteCRM à l'aide de PHP Jul 19, 2023 am 10:27 AM

Comment utiliser PHP pour étendre la fonction de génération de rapports de SuiteCRM SuiteCRM est un puissant système CRM open source qui fournit de riches fonctions pour aider les entreprises à gérer les relations clients. L'une des fonctions importantes est la génération de rapports. L'utilisation de rapports peut aider les entreprises à mieux comprendre leur situation commerciale et à prendre les bonnes décisions. Cet article expliquera comment utiliser PHP pour étendre la fonction de génération de rapports de SuiteCRM et fournira des exemples de code pertinents. Avant de commencer, vous devez vous assurer que SuiteCRM est installé.

Comment utiliser php pour étendre PDO afin de se connecter à la base de données Oracle Comment utiliser php pour étendre PDO afin de se connecter à la base de données Oracle Jul 29, 2023 pm 07:21 PM

Comment utiliser PHP pour étendre PDO afin de se connecter à la base de données Oracle Introduction : PHP est un langage de programmation côté serveur très populaire et Oracle est un système de gestion de base de données relationnelle couramment utilisé. Cet article explique comment utiliser l'extension PHP PDO (PHPDataObjects) pour se connecter à la base de données Oracle. 1. Installez l'extension PDO_OCI. Pour vous connecter à la base de données Oracle, vous devez d'abord installer l'extension PDO_OCI. Voici les étapes pour installer l'extension PDO_OCI : Assurez-vous

Premiers pas avec PHP : installation d'extensions PHP Premiers pas avec PHP : installation d'extensions PHP May 20, 2023 am 08:49 AM

Lors du développement avec PHP, nous devrons peut-être utiliser certaines extensions PHP. Ces extensions peuvent nous fournir plus de fonctions et d'outils, rendant notre travail de développement plus efficace et plus pratique. Mais avant d’utiliser ces extensions, nous devons d’abord les installer. Cet article vous expliquera comment installer les extensions PHP. 1. Qu'est-ce qu'une extension PHP ? Les extensions PHP font référence à des composants qui fournissent des fonctionnalités et des services supplémentaires au langage de programmation PHP. Ces composants peuvent être installés et utilisés via le mécanisme d'extension de PHP. L'extension PHP peut nous aider avec

Comment utiliser l'extension geoip de PHP ? Comment utiliser l'extension geoip de PHP ? Jun 01, 2023 am 09:13 AM

PHP est un langage de script côté serveur populaire capable de gérer le contenu dynamique des pages Web. L'extension geoip pour PHP vous permet d'obtenir des informations sur la localisation de l'utilisateur en PHP. Dans cet article, nous verrons comment utiliser l’extension geoip de PHP. Qu'est-ce que l'extension GeoIP pour PHP ? L'extension geoip pour PHP est une extension gratuite et open source qui vous permet d'obtenir des données sur les adresses IP et les informations de localisation. Cette extension peut être utilisée avec la base de données GeoIP, une base de données développée par MaxMin

Extension PHP et gestion des versions PHP de Pagoda Panel Extension PHP et gestion des versions PHP de Pagoda Panel Jun 21, 2023 am 08:49 AM

Pagoda Panel est un panneau de gestion de serveur open source tout en fournissant aux opérateurs de sites Web une gestion pratique de sites Web, de bases de données, de certificats SSL et d'autres services, il fournit également de puissantes fonctions d'extension PHP et de gestion de versions PHP, ce qui facilite la gestion du serveur. efficace. 1. Extension PHP L'extension PHP est un module utilisé pour améliorer les fonctions PHP. En installant des extensions PHP, davantage de fonctions et de services peuvent être implémentés, tels que : accélérateur : l'accélérateur peut améliorer considérablement les performances de PHP et réduire la charge du service en mettant en cache les scripts PHP.

Exploration approfondie du développement d'extensions PHP : découvrir les secrets du développement d'extensions PHP Exploration approfondie du développement d'extensions PHP : découvrir les secrets du développement d'extensions PHP Feb 19, 2024 pm 11:40 PM

Le développement d'extensions PHP est l'art de créer des fonctionnalités personnalisées, d'étendre les fonctionnalités de base de PHP et de créer des applications plus puissantes. Il ouvre de nouvelles possibilités dans le monde PHP, permettant aux développeurs de transcender les limitations fondamentales du langage. Cet article vous fera découvrir le développement d'extensions PHP, vous fournissant des connaissances complètes et des conseils pratiques, des concepts de base aux techniques avancées. Bases du développement d'extensions PHP Avant de commencer le développement d'extensions PHP, vous devez comprendre certains concepts de base. Que sont les extensions PHP ? Une extension PHP est une bibliothèque de liens dynamiques (DLL) qui étend les fonctionnalités de base de PHP et fournit de nouveaux types de données, fonctions et classes. Avantages des extensions PHP Les extensions PHP présentent de nombreux avantages, notamment : l'évolutivité, la flexibilité, l'optimisation des performances et la réutilisation du code. PHP

Tutoriel complet : Comment utiliser l'extension php GdImage pour la génération d'images Tutoriel complet : Comment utiliser l'extension php GdImage pour la génération d'images Jul 28, 2023 am 11:41 AM

Tutoriel complet : Comment utiliser l'extension PHP GdImage pour la génération d'images Introduction : La génération d'images est une exigence courante dans le développement de sites Web. Par exemple, générez des codes de vérification, des vignettes, des statistiques graphiques, etc. PHP fournit de nombreuses bibliothèques d'extensions pour le traitement des images, l'une des plus couramment utilisées est GdImage. Ce didacticiel explique comment utiliser l'extension GdImage pour générer des images et fournit des exemples de code pertinents. Étape 1 : Installez l'extension GdImage Pour utiliser l'extension GdImage, vous devez d'abord vous assurer que l'extension est installée.

See all articles