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 现在可以为空。

参见

添加备注

用户贡献的备注 7 条备注

marek995 at seznam dot cz
13 年前
我创建了一个函数,它将 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>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>

它只会显示第一个 <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
匿名
18 年前
我建议添加以下选项
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
juanhdv at NOSPAM dot divvol dot org
16 年前
在 PHP 5 中,当在你的 xml 文件中包含定义 '<?xml version="1.0" encoding="ISO-8859-1" ?>' 时,我也建议添加下面的选项

xml_parser_set_option($xml_parser,XML_OPTION_TARGET_ENCODING, "ISO-8859-1")。

它工作正常!

如果你的编码是 'UTF-8',只需替换 'ISO-8859-1'。
To Top