使用包含斜杠属性的simplexml_load_string将XML转换为数组

时间:2017-10-24 01:39:56

标签: php xml simplexml-load-string

我得到了 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 个答案:

答案 0 :(得分:0)

由于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">

所以不是用/加载它,而是加载它好像是两个属性,第一个没有值。