尝试从 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 &quot;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;&lt;msg&gt;&lt;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。