9

我从某个 ID 后的请求中获取简单的 xml 内容。但有时 ID 不再可用并且 XML 为空。

如果 xml 为空,如何使用 PHP 检查?

如果有人有想法,如果他能帮助我,我将不胜感激。

提前致谢。

马可

4

5 回答 5

13

如果您可以使用SimpleXML扩展:

$xmlObject = new SimpleXMLElement($xmlText);
if ($xmlObject->count() == 0) {
    //it's empty
}
else {
    //XML object has children
}

此外,SimpleXML 是一个非常方便的 XML 阅读器/编辑器。

详情:http ://ua2.php.net/manual/en/book.simplexml.php

于 2012-10-10T12:29:39.787 回答
8

我想这取决于你的意思是空的,如果整个文档是空的,你可以检查文档的字符串版本是否为空:

if (empty($xmlString)) 
{
    // is empty 
}

但是如果您期望一个根节点,您可能需要检查是否有任何子节点:

$xml = simplexml_load_file("test.xml");

if (empty($xml->getName()) && count($xml->children()) == 0) { 
    // is empty
}

希望有帮助。

于 2012-10-10T12:26:46.620 回答
2

只需在您的 id 之前使用 (string) 即可。例如:- 你的代码是这样的 $id = $xml->mail->id;

然后让它就像这样 $id = (string)$xml->mail->id;

它会起作用的

于 2014-01-21T07:36:48.597 回答
2

只是将我的两分钱添加到一个旧问题中,但评分最高的答案似乎建议使用 simplexml_load_file("test.xml"); 然后测试您期望的节点是否为空。因为如果文件为空,这会引发警告级别错误,所以我不同意,而是使用文件大小测试来包装调用。

$xmlInfo = new SplFileInfo('test.xml');
if((int) $xmlInfo->getSize() > 0)
{
   $xml = simplexml_load_file($xmlInfo->getPath());  
}

当然 OP 已经问过了How can I check with PHP if a xml is empty,它没有指定他是指节点还是文件,但为了完整性,它是存在的。

于 2014-04-14T08:27:41.580 回答
1

尝试这个:

$xml_str = '<?xml version="1.0" standalone="yes"?><Name/>';
$xml = new SimpleXMLElement($xml_str);

if(empty($xml->Name[0])){
    // ITS EMPTY !! DO SOMETHING
    echo "ITS EMPTY ASJK";
}
于 2019-04-29T06:47:20.670 回答