PHP Conference Japan 2024

xml_parser_create

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

xml_parser_create创建 XML 解析器

描述

xml_parser_create(?string $encoding = null): XMLParser

xml_parser_create() 创建一个新的 XML 解析器,并返回一个 XMLParser 实例,供其他 XML 函数使用。

参数

encoding

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

返回值

返回一个新的 XMLParser 实例。

变更日志

版本 描述
8.0.0 此函数现在返回一个 XMLParser 实例;以前,它返回一个 resource,或者在失败时返回 false
8.0.0 encoding 现在可以为 null。

参见

添加注释

用户贡献的注释 5 条注释

marek995 at seznam dot cz
14 年前
我创建了一个函数,它结合了 xml_paresr_create 和所有相关的函数。

<?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;
}
}
}
?>
输入值是一个字符串。
它调用函数 start_tag()、between() 和 end_tag(),就像原始的 xml 解析器一样。

但它有一些区别
- 它不检查代码。只是将值重新发送到这三个函数,无论它们是否正确
- 它使用参数。例如:从标签 <sth b="42"> 发送 sth b="42"
- 它处理带变音符号的字符。原始解析器有时会在第一个变音符号出现之前包装文本。
- 处理所有编码。如果输入为 UTF-8,输出也将为 UTF-8
- 它处理字符串。而不是文件指针。
- 没有“保留的 XML 名称”错误
- 不需要 doctype
- 它不处理注释、备注、编程指令等。只处理标签

处理函数的定义是

<?php
function between($stuff) {}
?>

没有其他属性
jcalvert at gmx dot net
20 年前
为了保持 PHP4 和 PHP5 之间的兼容性,您应该始终向此函数传递字符串参数。如果省略参数,PHP4 会自动检测输入的格式,而 PHP5 会假设格式为 ISO-8859-1(并因 UTF-8 文件的字节顺序标记而出现问题)。

像这样调用函数 <?php $res = xml_parser_create('') ?> 将导致 PHP 的两个版本都自动检测格式。
Tobbe
19 年前
如果同一级别上有多个具有相同名称的标签,上述“XML 到数组”代码将无法正常工作,例如

<currenterrors>
<error>
<description>这是一个真正的错误...</description>
</error>
<error>
<description>这是一个第二个错误...</description>
</error>
<error>
<description>今天有很多错误...</description>
</error>
<error>
<description>这是最后一个错误...</description>
</error>
</currenterrors>

然后它只会显示第一个 <error> 标签。
在这种情况下,您需要自动对标签进行编号,或者可能为每个新元素创建多个数组。
php at stock-consulting dot com
19 年前
即使我将“UTF-8”作为编码类型传递,PHP(版本 4.3.3)也没有将输入文件视为 UTF-8。输入文件缺少 BOM 头字节(根据 RFC3629 确实可以省略...但这里有些不明确。RFC 似乎对 BOM 头提出了建议)。如果您希望确保 PHP 正确处理 UTF-8 编码的文件,请确保它以相应的 3 字节 BOM 头 (0xEF 0xBB 0xBF) 开头
bishop at php dot net
5 年前
内部人员已提议[1] 将此扩展从基于资源更改为基于对象。当进行此更改时,xml_parser_create 将返回一个对象,而不是资源。鼓励应用程序开发人员替换任何对显式成功的检查,例如

<?php
$res
= xml_parser_create(/*...*/);
if (!
is_resource($res)) {
// ...
}
?>

使用对显式失败的检查


<?php
$res
= xml_parser_create(/*...*/);
if (
false === $res) {
// ...
}

[
1]: https://marc.info/?l=php-internals&m=154998365013373&w=2
To Top