微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP xpath未定义偏移量0,但元素存在// // LARAVEL

如何解决PHP xpath未定义偏移量0,但元素存在// // LARAVEL

我真的很难使它正常工作。 xpath在同一文件的其他功能中也能正常工作。我正在尝试从XML文件获取特定项目,当我dd()时它可以正常工作。但是,当我尝试将完全相同的代码加载到变量中时,会提示“未定义的偏移量0”。我在Laravel本地工作。

XML

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<idPkg:Graphic xmlns:idPkg="http://ns.adobe.com/AdobeInDesign/idml/1.0/packaging" DOMVersion="15.1">
    <Color Self="Color/u2a64f" Model="Process" Space="RGB" ColorValue="204 204 204" />
</idPkg:Graphic>

PHP

function getColor($colorID){ //$colorID = Color/u2a64f
    $xml= simplexml_load_file('/Resources/Graphic.xml');
    $colorNode = $xml->xpath('//Color[@Self="'.$colorID.'"]');

    dd($colorNode[0]->attributes()->ColorValue);

    /* outputs:
    SimpleXMLElement {#316 ▼
        +"0": "204 204 204"
    }
    */

    $fillColor = $colorNode[0]->attributes()->ColorValue; // Line of error

    /* outputs:
    ErrorException (E_NOTICE)
    Undefined offset: 0
    */

    return $fillColor;
}

编辑: 我刚发现的结果:当我用变量的内容替换xpath中的变量时,它起作用了。

function getColor($colorID){ //$colorID = Color/u2a64f
    $xml= simplexml_load_file('/Resources/Graphic.xml');
    // doesnt work
    $path = '//Color[@Self="'.$colorID.'"]';

    // does work
    $path = '//Color[@Self="Color/u2a64f"]';

    $colorNode = $xml->xpath($path);

    dd($colorNode[0]->attributes()->ColorValue);

    /* outputs:
    SimpleXMLElement {#316 ▼
        +"0": "204 204 204"
    }
    */

    $fillColor = $colorNode[0]->attributes()->ColorValue; // Line of error

    /* outputs:
    ErrorException (E_NOTICE)
    Undefined offset: 0
    */

    return $fillColor;
}

我实在无法解决……我很高兴得到任何提示或帮助!

解决方法

没关系,我自己找到了解决方案。

再次检查我的代码后,我发现有时某些XML节点没有属性FillColor。因此,我首先检查了我的参数是否已设置,然后继续执行xpath。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。