【问题标题】:Convert XML to array using simplexml_load_string with attribute contain slash使用属性包含斜杠的 simplexml_load_string 将 XML 转换为数组
【发布时间】: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的值?

【问题讨论】:

    标签: php xml simplexml


    【解决方案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 的值没有了。
    猜你喜欢
    • 2016-07-10
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多