php simplexml检查是否有孩子点头?

时间:2011-11-09 13:51:18

标签: php xml simplexml

我有很多xml个文件,我不想获取该值,但检查他们是否有孩子点头或否。所以我使用count代替foreach。但如果第一个no roop中没有$xml->book->date,我的代码总会回显$xml->book

$xml = simplexml_load_file('some.xml');
if (@count($xml->book->date)>0){
    echo 'yes';
}else{
    echo 'no';
}
像这样的

<?xml version="1.0" encoding="utf-8"?>
<Catalog>
    <book>
     <title/><description/><price/>
  </book>
  <book>
     <title/><description/><price/>
     <date/>  //(optional, there may be 0 to n [book] elements having a [date] element in the document)
  </book>
  <book>
     <title/><description/><price/>
  </book>
  <book>
     <title/><description/><price/>
     <date/>
  </book>
</Catalog>

对于本文档,“count($ xml-&gt; book-&gt; date)”的工作版本的结果应为2,即&gt; 0

编辑:也许不要使用count,但如何检查整个xml文件中是否有date childnod?感谢。

3 个答案:

答案 0 :(得分:4)

为什么不尝试使用xpath?

$date=$xml->xpath('/book/date[1]');

if($date){
    echo 'Yes';
}
else{
   echo 'No';
}

http://www.php.net/manual/en/simplexmlelement.xpath.php

http://www.w3schools.com/xpath/xpath_syntax.asp

答案 1 :(得分:0)

我猜你在计数之前不需要'@'(....)。试试没有那个

答案 2 :(得分:0)

如果你想检查整个xml文档,那么我认为你必须遍历所有书籍元素 -

$found = false;
foreach($xml->book as $book)
{
    if(count($book->date)>0)
    {
        $found = true;
        break;
    }
}