PHP 8.5.8 Released!

xml_parser_create

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_parser_create创建 XML 解析器

说明

function xml_parser_create(? string $encoding = null ): XMLParser

xml_parser_create() 新建 XML 解析器并返回可被其它 XML 函数使用的 XMLParser 实例。

参数

encoding

自动检测输入编码,因此 encoding 参数仅指定输出编码。默认输出字符集是 UTF-8。如果传递的是空字符串,解析器会尝试通过查看头的的 3 或 4 个字节来识别文档的编码方式。支持的编码有 ISO-8859-1UTF-8US-ASCII

返回值

返回新 XMLParser 实例。

更新日志

版本 说明
8.0.0 此函数现在返回 XMLParser 实例;之前返回 resource , 或者在失败时返回 false
8.0.0 encoding 现在可以为 null。

参见

发现了问题?

了解如何改进此页面提交拉取请求报告一个错误
+添加备注

用户贡献的备注 5 notes

up
11
marek995 at seznam dot cz
15 years ago
I created a function, which combines xml_paresr_create and all functions around.
<?php
function html_parse($file)
 {
 $array = str_split($file, 1);
 $count = false;
 $text = "";
 $end = false;
 foreach($array as $temp)
 {
 switch($temp)
 {
 case "<":
 between($text);
 $text = "";
 $count = true;
 $end = false;
 break;
 case ">":
 if($end == true) {end_tag($text);}
 else {start_tag($text);}
 $text = "";
 break;
 case "/":
 if($count == true) {$end = true;}
 else {$text = $text . "/";}
 break;
 default:
 $count = false;
 $text = $text . $temp;
 }
 }
 }
?>
The input value is a string.
It calls functions start_tag() , between() and end_tag() just like the original xml parser.
But it has a few differences:
 - It does NOT check the code. Just resends values to that three functions, no matter, if they are right
 - It works with parameters. For example: from tag <sth b="42"> sends sth b="42"
 - It works wit diacritics. The original parser sometimes wrapped the text before the first diacritics appearance.
 - Works with all encoding. If the input is UTF-8, the output will be UTF-8 too
 - It works with strings. Not with file pointers.
 - No "Reserved XML name" error
 - No doctype needed
 - It does not work with commentaries, notes, programming instructions etc. Just the tags
definition of the handling functions is:
<?php
function between($stuff) {}
?>

No other attributes
up
2
jcalvert at gmx dot net
22 years ago
To maintain compatibility between PHP4 and PHP5 you should always pass a string argument to this function. PHP4 autodetects the format of the input if you leave it out whereas PHP5 will assume the format to be ISO-8859-1 (and choke on the byte order marker of UTF-8 files).
Calling the function as <?php $res = xml_parser_create('') ?> will cause both versions of PHP to autodetect the format.
up
1
Tobbe
21 years ago
The above "XML to array" code does not work properly if you have several tags on the same level and with the same name, example:
<currenterrors>
<error>
<description>This is a real error...</description>
</error>
<error>
<description>This is a second error...</description>
</error>
<error>
<description>Lots of errors today...</description>
</error>
<error>
<description>This is the last error...</description>
</error>
</currenterrors>
It will then only display the first <error>-tag.
In this case you will need to number the tags automatically or maybe have several arrays for each new element.
up
-1
php at stock-consulting dot com
21 years ago
Even though I passed "UTF-8" as encoding type PHP (Version 4.3.3) did *not* treat the input file as UTF-8. The input file was missing the BOM header bytes (which may indeed be omitted, according to RFC3629...but things are a bit unclear there. The RFC seems to make mere recommendations concering the BOM header). If you want to sure that PHP treats an UTF-8 encoded file correctly, make sure that it begins with the corresponding 3 byte BOM header (0xEF 0xBB 0xBF)
up
-1
bishop at php dot net
7 years ago
Internals has proposed[1] changing this extension from resource-based to object-based. When this change is made, xml_parser_create will return an object, not a resource. Application developers are encouraged to replace any checks for explicit success, like:
<?php
$res = xml_parser_create(/*...*/);
if (! is_resource($res)) {
 // ...
}
?>

With a check for explicit failure:
<?php
$res = xml_parser_create(/*...*/);
if (false === $res) {
 // ...
}
[1]: https://marc.info/?l=php-internals&m=154998365013373&w=2
+添加备注

AltStyle によって変換されたページ (->オリジナル) /