PHP Conference Japan 2024

XMLReader::open

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

XMLReader::open设置包含要解析的 XML 的 URI

描述

public static XMLReader::open(string $uri, ?string $encoding = null, int $flags = 0): XMLReader
public XMLReader::open(string $uri, ?string $encoding = null, int $flags = 0): bool

设置包含要解析的 XML 文档的 URI。

参数

uri

指向文档的 URI。

encoding

文档编码或 null

flags

LIBXML_* 常量的位掩码。

返回值

成功时返回 true,失败时返回 false。如果以静态方式调用,则返回 XMLReader 或失败时返回 false

错误/异常

  • 传递无效的 encoding 将抛出 ValueError
  • 此方法可以静态调用,但在 PHP 8.0.0 之前,在这种情况下会发出 E_DEPRECATED 错误。

变更日志

版本 描述
8.4.0 传递无效的 encoding 现在将抛出 ValueError
8.0.0 XMLReader::open() 现在声明为静态方法,但仍可以在 XMLReader 实例上调用。

参见

添加注释

用户贡献的注释 5 条注释

10
den at nurfuerspam dot de
7 年前
如果您想使用 POST 请求从 HTTP 读取 XML,您可以使用 libxml_set_streams_context。
示例

<?php

$param
= array('http' => array(
'method' => 'POST',
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'content' => http_build_query(array(
'post_param1' => 'value1',
'post_param2' => 'value2',
)),
));
libxml_set_streams_context(stream_context_create($param));
$reader = XMLReader::open('https://example.com/get.php?get_param=value3');

?>
9
dave at sophoservices dot com
8 年前
当使用 XmlReader 读取本地 XML 文件时,请记住 open 函数请求 URI。在 XML 的完整路径前面添加“file://”。否则,您可能会收到

PHP Warning: XMLReader::open(): Unable to open source data in ...
3
alvaro at demogracia dot com
10 年前
XML 可以选择声明自己的编码

<?xml version="1.0" encoding="UTF-8"?>

您可以使用 $encoding 参数提供此信息(如果缺少)或覆盖它(如果错误)。

输出始终为 UTF-8(这就是 libxml 的工作方式)。
0
crungmungus at gmail dot com
16 年前
Windows 用户请记住,如果您想能够使用此函数(以及其他函数)与 HTTPS URL 一起使用,请在 php.ini 中启用 php_openssl.dll。
-3
mood(_a_)twolate.com
8 年前
由于某些原因,open() 方法一直抛出此错误

PHP Warning: XMLReader::open(): Unable to open source data in /var/www/nota/ethamap/fat_xml.php

这没有意义,因为托管在我的服务器上的 xml 文件目标完全可以访问。在调用 open() 之前添加此行可以解决问题

libxml_disable_entity_loader(false);

请查看 https://bugs.php.net/bug.php?id=62577
它与之相关。
To Top