3

抱歉,如果有一个明显的答案(我知道大约有 1000 个类似的问题) - 但我花了两天时间试图攻击这个但没有成功。我似乎无法破解为什么我得到一个空响应......

简短的背景:以下工作正常

$xurl= new SimpleXMLElement('https://gptxsw.appspot.com/view/submissionList?formId=GP_v7&numEntries=1', NULL,    TRUE);
$keyname = $xurl->idList->id[0];
echo $keyname;

这提供了一个响应:像 uuid:d0721391-6953-4d0b-b981-26e38f05d2e5 这样的唯一键

但是我尝试了一个类似的请求(最终将基于第一个请求)并失败了。我已将代码简化如下...

$xdurl= new SimpleXMLElement('https://gptxsw.appspot.com/view/downloadSubmission?formId=GP_v7[@version=null%20and%20@uiVersion=null]/GP_v7[@key=uuid:d0721391-6953-4d0b-b981-26e38f05d2e5]', NULL, TRUE);
$keyname2 = $xdurl->data->GP_v7->SDD_ID_N[0];
echo $keyname2;

这提供了空值。如果我尝试类似 echo $xdurl->asXML(); 我从网站(不是来自 PHP)收到错误响应。

我是否需要从 SimpleXMLElement 中弹出第二个请求?我已经阅读了有关使用 XPath 和定义命名空间的信息,但我不确定是否需要其中任何一个:第二个文件确实有两个命名空间,但其中一个未使用,另一个没有元素前缀。另外,我已经尝试了这些变体 - 足以认为我的问题/错误本质上更具全球性(或由于缺乏经验而导致疏忽)。

出于此请求的目的,我无法控制任一 XML 文件的格式。

4

2 回答 2

0

我们开始吧:SimpleXMLElement似乎重新转义(或以某种方式错误地处理)已经 url 转义的字符,如空格。尝试:

$xdurl= new SimpleXMLElement('https://gptxsw.appspot.com/view/downloadSubmission?formId=GP_v7[@version=null and @uiVersion=null]/GP_v7[@key=uuid:d0721391-6953-4d0b-b981-26e38f05d2e5]', NULL, TRUE);
$keyname2 = $xdurl->data->GP_v7->SDD_ID_N[0];
echo $keyname2;

你应该没事。

(仅供参考:我通过手动创建名为“foo.xml”的 XML 请求结果的本地副本进行了调试,该副本运行良好。)

于 2012-10-10T09:55:52.437 回答
0

感谢@Matze 让我走上正轨。问题是 URL 具有 SimpleXMLElement 在没有帮助的情况下无法解析的特殊字符。

解决方案:添加 urlencode() 命令,如下所示

$fixurl = urlencode('https://gptxsw.appspot.com/view/downloadSubmission?formId=GP_v7[@version=null and     @uiVersion=null]/GP_v7[@key=uuid:d0721391-6953-4d0b-b981-26e38f05d2e5]');
$xdurl= new SimpleXMLElement($fixurl, NULL, TRUE);
$keyname2 = $xdurl->data->GP_v7->SDD_ID_N[0];
echo $keyname2;

这提供了答案(在本例中为 958)

于 2012-10-10T16:38:57.273 回答