Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:解析xml并检查文件的内容是否超出了标题_Php_Xml - Fatal编程技术网

PHP:解析xml并检查文件的内容是否超出了标题

PHP:解析xml并检查文件的内容是否超出了标题,php,xml,Php,Xml,在这里发布之前,我试着在网上查找,但似乎找不到我想要的答案。我一直在探索XML解析,并取得了稳步进展,但遇到了一个绊脚石。我试图做的是检查提要中的XML是否包含头以外的任何内容(在本例中,XML的头只是:)。如果提要有内容,我可以做所有我需要做的事情(无论是显示它还是用结果填充数据库),但是当提要不可用时,生成的XML文档只显示标题而不显示其他内容 因此,我希望能够检查XML文档在头之后是否有任何内容,如果有,则更新本地保存的XML文件,如果没有,则显示错误,并且不覆盖本地文件的内容 我的原始代

在这里发布之前,我试着在网上查找,但似乎找不到我想要的答案。我一直在探索XML解析,并取得了稳步进展,但遇到了一个绊脚石。我试图做的是检查提要中的XML是否包含头以外的任何内容(在本例中,XML的头只是:
)。如果提要有内容,我可以做所有我需要做的事情(无论是显示它还是用结果填充数据库),但是当提要不可用时,生成的XML文档只显示标题而不显示其他内容

因此,我希望能够检查XML文档在头之后是否有任何内容,如果有,则更新本地保存的XML文件,如果没有,则显示错误,并且不覆盖本地文件的内容

我的原始代码是:

$acc = new DOMDocument();
$acc->load(url for xml file here);

$acc->save(filepath to saved xml here);
$filepath = (same filepath to use as check);

if((is_file($filepath))&&(file_exists($filepath))){
    echo "XML Data successfully written to directory.";
}else{
    echo "XML data has failed to be written to the directory.";
}
…但显然,这只是检查文件是否存在,而不是其中是否有任何有意义的内容。如果XML服务器处于脱机/不可用状态,它仍然输出XML文件,但只输出标题。所以我试了一下:

$acc = new DOMDocument();
$acc->load(XML URL);

if(!empty($acc)){//so, something came in from the xml server 
    if(is_null($acc){//Is it empty?
        echo"Server unavailable, try later.";
    }else{
        $acc->save(filepath to saved XML);
        $filepath = (same filepath to use as check check);
        if((is_file($filepath))&&(file_exists($filepath))){
            echo "XML Data successfully written to directory.";
        }else{
            echo "XML data has failed to be written to the directory.";
        }
    }
}else{
    echo"XML server unavailable for request at present";
}
…但是没有快乐。在此方面的任何帮助都将不胜感激。。。我知道我做错了什么,但我真的很感激任何指点


提前感谢:)

如果XML无效,DOMDocument类将不会加载该XML,这可能是因为服务器返回404或类似文件,也可能是因为没有XML内容。无论哪种情况,它都返回false并输出警告

如果您很高兴在错误日志中看到警告,并且不需要区分服务器错误和“空”XML文件,您可以简单地执行以下操作:

$acc = new DOMDocument();
if ($acc->load("35702954.xml")) {
    $acc->save($filepath);
    if(is_file($filepath)){
        echo "XML Data successfully written to directory.";
    }else{
        echo "XML data has failed to be written to the directory.";
    }
}else{
    echo"XML server unavailable for request at present";
}

file\u exists
是多余的,因为
is\u file
已检查该文件是否存在。

由于服务器未返回404,XML似乎有效。只是当服务器不输出它通常所做的事情时,它只输出一个带有xml头的xml文件,该xml头通过并覆盖现有的(全部内容)xml文件。。。有没有一种方法可以检查头以外的内容,如果没有内容就拒绝xml文件?至少,这是一个不需要大量编码的解决方案!(尽管如果需要的话,我很乐意对其进行编码…)我已经编辑以删除冗余文件_的存在-因此感谢您的提示:)在这种情况下,DOMDocument
load
方法也将返回
false
。上面的代码在我对一个只有一个头的XML“文件”的测试中起到了作用。我将用一个本地模型来尝试它-它可能只是“其中之一”。。。感谢您的回复,非常有帮助:)