如何使用SimpleXML检查元素是否存在?

6
我可以帮助您进行翻译。以下是(简化的XML):

我有以下(简化的XML):

<?xml version="1.0" encoding="UTF-8" ?>

<products>
  <product>
    <artnr>xxx1</artnr>
  </product>
</products>

以下是(再次简化的)PHP代码:

$xml= @simplexml_load_file($filename);

foreach ($xml->product as $product) {
    if (!$this->validate_xml_product($product)) {
        continue;
    }
}

function validate_xml_product($product)
{
    if (!property_exists('artnr', $product)) {
        // why does it always validate to true?
    }
}

由于某些原因,该产品无法验证。

property_exists不是在$product中查找是否有artnr元素的正确方法吗?

3个回答

9

你的代码中参数的顺序是颠倒的。正确的顺序是先对象,再属性名:

if (!property_exists($product, 'artnr')) {

显然,这只适用于“真实”的属性。如果该属性是使用__get方法实现的,则也不起作用。


AAARRRGGGGHHH... 该死的PHP,仅仅通过随机切换函数参数就搞乱人们的思维! :) 谢谢! - PeeHaa

3

1

使用:

function validate_xml_product($product)
{
    $children=$product->children();
    foreach($children as $child){
         if ($child->getName()=='artnr') {
             return true;
         }
    }
    return false;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接