Checking if an object attribute is set - SimpleXML

可紊 提交于 2019-12-07 01:43:49

问题


I have some XML I am using PHP's SimpleXML class with and I have elements within the XML such as:

<condition id="1" name="New"></condition>
<condition id="2" name="Used"></condition>

However they are not always there, so I need to check if they exist first.

I have tried..

if (is_object($bookInfo->page->offers->condition['used'])) {
    echo 'yes';
}

as well as..

if (isset($bookInfo->page->offers->condition['used'])) {
    echo 'yes';
}

But neither work. They only work if I remove the attribute part.

So how can I check to see if an attribute is set as part of an object?


回答1:


What you're looking at is the attribute value. You need to look at the attribute (name in this case) itself:

if (isset($bookInfo->page->offers->condition['name']) && $bookInfo->page->offers->condition['name'] == 'Used')
    //-- the rest is up to you



回答2:


Actually, you should really use SimpleXMLElement::attributes(), but you should check the Object afterwards using isset():

$attr = $bookInfo->page->offers->condition->attributes();
if (isset($attr['name'])) {
    //your attribute is contained, no matter if empty or with a value
}
else {
    //this key does not exist in your attributes list
}



回答3:


You can use SimpleXMLElement::attributes()

$attr = $bookInfo->page->offers->condition->attributes();

if ($attr['name'] == 'Used') {
  // ...


来源:https://stackoverflow.com/questions/10909372/checking-if-an-object-attribute-is-set-simplexml

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!