尝试从 PHP 中的 HTTP 请求解析 XML 字符串
Trying to Parse XML String from HTTP Request in PHP
作为序言:我无法想象以前没有人问过这个问题,但我在找到解决方案时惨遭失败......我认为有一个简单的解决方案,而我只是做了一些完全错误的事情。
我有一个简单的 index.php 文件,如下所示:
<?php
$data = file_get_contents('php://input');
echo "DATA : " . $data;
$xml = new SimpleXMLElement($data, 0, true);
echo "XML : " . $xml;
$RoundTrip = (string) $xml->RoundTrip;
$TransactionId = (string) $xml->TransactionId;
?>
回显“DATA”显示:
<?xml version="1.0" encoding="utf-8"?><msg><head><Client>Test</Client><RoutingArea>811</RoutingArea><Source>MySRC</Source><Destination>BSRC</Destination><Version>2.27</Version><RoundTrip>ID=001088129291102</RoundTrip><TransactionId>12652b05-ceb9-11eb-a091-00505687f2ee</TransactionId><ServerId>03</ServerId></head><body><POdated>
...简单XML元素抛出错误:
PHP Warning: SimpleXMLElement::__construct(): I/O warning : failed to load external entity "<?xml version="1.0" encoding="utf-8"?><msg><head
好像字符串被读取为 URL 编码...但初始输出不是 URL 编码。
我的目标是: 从请求中接收 XML 文档作为字符串并能够解析它。
它需要文件路径或 URL,而不是文件内容(因为第 3 个参数是 true
,而默认值是 false
)。
尝试删除第三个参数,例如:
$xml = new SimpleXMLElement($data, 0);
但如果这不起作用,您仍然可以选择:
$xml = simplexml_load_string($data);
// do something with $xml
第三个参数是$dataIsURL
,你指定的是true
。
https://www.php.net/manual/en/simplexmlelement.construct.php
dataIsURL
By default, dataIsURL is false. Use true to specify that data is a path or URL to an XML document instead of string data.
因此,要么更改为 false
:
$xml = new SimpleXMLElement($tag, 0, false);
或者删除第三个参数:
$xml = new SimpleXMLElement($tag, 0);
因为您提供的是字符串而不是 URL。
作为序言:我无法想象以前没有人问过这个问题,但我在找到解决方案时惨遭失败......我认为有一个简单的解决方案,而我只是做了一些完全错误的事情。
我有一个简单的 index.php 文件,如下所示:
<?php
$data = file_get_contents('php://input');
echo "DATA : " . $data;
$xml = new SimpleXMLElement($data, 0, true);
echo "XML : " . $xml;
$RoundTrip = (string) $xml->RoundTrip;
$TransactionId = (string) $xml->TransactionId;
?>
回显“DATA”显示:
<?xml version="1.0" encoding="utf-8"?><msg><head><Client>Test</Client><RoutingArea>811</RoutingArea><Source>MySRC</Source><Destination>BSRC</Destination><Version>2.27</Version><RoundTrip>ID=001088129291102</RoundTrip><TransactionId>12652b05-ceb9-11eb-a091-00505687f2ee</TransactionId><ServerId>03</ServerId></head><body><POdated>
...简单XML元素抛出错误:
PHP Warning: SimpleXMLElement::__construct(): I/O warning : failed to load external entity "<?xml version="1.0" encoding="utf-8"?><msg><head
好像字符串被读取为 URL 编码...但初始输出不是 URL 编码。
我的目标是: 从请求中接收 XML 文档作为字符串并能够解析它。
它需要文件路径或 URL,而不是文件内容(因为第 3 个参数是 true
,而默认值是 false
)。
尝试删除第三个参数,例如:
$xml = new SimpleXMLElement($data, 0);
但如果这不起作用,您仍然可以选择:
$xml = simplexml_load_string($data);
// do something with $xml
第三个参数是$dataIsURL
,你指定的是true
。
https://www.php.net/manual/en/simplexmlelement.construct.php
dataIsURL
By default, dataIsURL is false. Use true to specify that data is a path or URL to an XML document instead of string data.
因此,要么更改为 false
:
$xml = new SimpleXMLElement($tag, 0, false);
或者删除第三个参数:
$xml = new SimpleXMLElement($tag, 0);
因为您提供的是字符串而不是 URL。