【问题标题】:Trying to Parse XML String from HTTP Request in PHP尝试从 PHP 中的 HTTP 请求解析 XML 字符串
【发布时间】:2021-09-01 13:54:03
【问题描述】:

作为前言:我无法想象以前没有人问过这个问题,但是我在寻找解决方案时惨遭失败......我认为有一个简单的解决方案,我只是在做完全错误的事情。

我有一个简单的 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>

...SimpleXMLElement 抛出错误:

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

好像字符串被读取为 URLencoded...但初始输出不是 URLencoded。

我的目标是:从请求中以字符串形式接收 XML 文档并能够对其进行解析。

【问题讨论】:

  • 通过查看实际源代码来检查您的原始字符串是否被浏览器格式化。
  • @NigelRen 我没有在浏览器中执行任何这些操作。这一切都在服务器上。谢谢!

标签: php xml xmlhttprequest


【解决方案1】:

它需要一个文件路径或 URL,而不是文件内容(因为第三个参数是 true,而默认是 false)。

尝试删除第三个参数,如:

$xml = new SimpleXMLElement($data, 0);

但如果这不起作用,您仍然可以选择:

$xml = simplexml_load_string($data);

// do something with $xml

【讨论】:

  • 您的第二个选项对我有用。谢谢!
【解决方案2】:

第三个参数是$dataIsURL,你指定的是true

https://www.php.net/manual/en/simplexmlelement.construct.php

dataIsURL

默认情况下,dataIsURL 为 false。使用 true 指定数据是 XML 文档的路径或 URL,而不是字符串数据。

所以,要么改成false

$xml = new SimpleXMLElement($tag, 0, false);

或者删除第三个参数:

$xml = new SimpleXMLElement($tag, 0);

因为您提供的是字符串而不是 URL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2015-10-17
    • 1970-01-01
    相关资源
    最近更新 更多