使用属性包含斜杠的 simplexml_load_string 将 XML 转换为数组
Posted
技术标签:
【中文标题】使用属性包含斜杠的 simplexml_load_string 将 XML 转换为数组【英文标题】:Convert XML to array using simplexml_load_string with attribute contain slash 【发布时间】:2018-04-04 16:24:29 【问题描述】:我得到了 simplexml_load_string():实体:第 2 行:解析器错误:属性 Auth 的规范授权值 当尝试使用 php simplexml_load_string 将 xml 转换为数组时
这是我的 XML
<?xml version="1.0" encoding="utf-8"?>
<AssociateUserToPMSResponse Auth/UserToken="somestring" warning="Already existed in database">
<Success>true</Success>
</AssociateUserToPMSResponse>
当我尝试使用从 XML 中删除的整洁类 Auth/UserToken 时。 如何获取Auth/UserToken的值?
【问题讨论】:
【参考方案1】:由于 XML 的性能不如 XML,因此可以使用 DOM 将其加载为格式不正确的 html。以下代码将加载内容 - 加载的一个轻微副作用是标记名称全部转换为小写(我在 XPath 表达式中使用 'success' 而不是 'Success')。
<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );
$xml = <<< XML
<?xml version="1.0" encoding="utf-8"?>
<AssociateUserToPMSResponse Auth/UserToken="somestring" warning="Already existed in database">
<Success>true</Success>
</AssociateUserToPMSResponse>
XML;
$doc = new DOMDocument();
libxml_use_internal_errors(TRUE);
$doc->loadHTML($xml);
$xp = new DOMXPath($doc);
$s = $xp->query("//success");
echo $doc->saveHTML($s[0]);
另外如果你输出文档的内容,你会发现第一个实体被加载为...
<associateusertopmsresponse auth warning="Already existed in database">
所以不是用 / 加载它,而是像两个属性一样加载它,第一个没有值。
【讨论】:
我要转换的 xml 有很多属性的变体,例如,Something/Things 等等 ... 我改了代码,看看有没有用。 我试过了,但是 Auth/UserToken 的值没有了。以上是关于使用属性包含斜杠的 simplexml_load_string 将 XML 转换为数组的主要内容,如果未能解决你的问题,请参考以下文章