php - 使用simplexml解析特殊字符xml文件

标签 php xml parsing simplexml special-characters

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

简短背景:以下工作正常

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

这提供了一个响应:一个唯一的 key ,如 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 和定义 namespace 的内容,但我不确定是否需要其中任何一个:第二个文件确实有两个 namespace ,但其中一个未被使用,另一个没有元素前缀。另外,我尝试了这些变体 - 足以认为我的问题/错误本质上更具全局性(或由于缺乏经验而疏忽)。

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

最佳答案

开始吧: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 请求结果的本地副本来调试它,效果很好。)

关于php - 使用simplexml解析特殊字符xml文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12811475/

相关文章:

c++ - 在节点 MSXML 中添加额外的命名空间

Python 使用 Beautiful Soup 对特定内容进行 HTML 处理

php 在 csv 中写入希伯来语/UTF-8

java - 如何在java中有选择地合并两个xml文件

css - 使用外部 CSS 显示 XSLT 的结果

java - java中的html截断器

c++ - 运行时用户输入解析

javascript - 拆分 JSON 响应并使用图表数据

php - 谁能帮我逐行描述这个php代码: functions & recursions

php 中的 php 以包含 wordpress 自定义字段