gpt4 book ai didi

php - 如何使用 DOMDocument::loadXML() 获取解析错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:41:20 25 4
gpt4 key购买 nike

我正在尝试加载标签不匹配的 xml,我希望这样的方法可以工作,但运气不好。

try{
$xml=new \DOMDocument('1.0','utf-8');
$xml->loadXML(file_get_contents($file),
}catch (\Exception $e){
echo $e->getMessage());
}

现在我真的需要为解析错误抛出异常。我试图通过 options加载 XML

LIBXML_ERR_ERROR|LIBXML_ERR_FATAL|LIBXML_ERR_WARNING

又一次不走运。请指导我如何捕获所有这些解析错误。

编辑

正如@Ghost 在评论中所建议的那样,我想出了这个解决方案

abstract class XmlReadStrategy extends AbstractReadStrategy
{

/** @var array */
protected $importAttributes;

/**
* @param $fileFullPath
* @param $fileName
*/
public function __construct($fileFullPath,$fileName)
{
parent::__construct($fileFullPath,$fileName);
libxml_use_internal_errors(true);
}

/**
*
*/
protected function handleXmlException(){
$this->dataSrc=array();
foreach(libxml_get_errors() as $e){
$this->logger->append(Logger::ERROR,'[Error] '.$e->message);
}
}

/**
* Import xml file
* @param string $file
* @throws \Exception
*/
protected function loadImportFileData($file)
{
try{
$xml=new \DOMDocument('1.0','utf-8');
if(!$xml->loadXML(file_get_contents($file))){
$this->handleXmlException();
}
$this->dataSrc=$this->nodeFilter($xml);
}catch (\Exception $e){
$this->logger->append(Logger::ERROR,$e->getMessage());
$this->dataSrc=array();
}
}

....
}

所以诀窍是调用 libxml_use_internal_errors(true); 然后检查 loadXML() 状态,例如

if(!$xml->loadXML(file_get_contents($file))){
$this->handleXmlException();
}

我不知道这个 libxml_use_internal_errors(true); 到目前为止是否有任何副作用

最佳答案

您可以启用 libxml_use_internal_errors并得到错误 libxml_get_errors()

  libxml_use_internal_errors(true);
$xml = new DOMDocument('1.0','utf-8');

if ( !$xml->loadxml(file_get_contents($file)) ) {
$errors = libxml_get_errors();
var_dump($errors);
}

关于php - 如何使用 DOMDocument::loadXML() 获取解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26376300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com