Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.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';s SimpleXMLElement返回解析错误,尽管XML看似有效_Php_Xml_Xml Parsing_Simplexml_Weather - Fatal编程技术网

PHP';s SimpleXMLElement返回解析错误,尽管XML看似有效

PHP';s SimpleXMLElement返回解析错误,尽管XML看似有效,php,xml,xml-parsing,simplexml,weather,Php,Xml,Xml Parsing,Simplexml,Weather,我在通过PHP的SimpleXMLElement正确解析XML时遇到了可怕的问题。我得到的错误(下面)看起来像是一个解析错误,但我似乎找不到任何问题。而且,由于这是国家气象局的警报源,我不得不假设其他人正在使用该源并使其正常工作 我已经尝试了以下所有方法和几种变体: $simpleFeed = new SimpleXMLElement(simplexml_load_string(file_get_contents('http://alerts.weather.gov/cap/us.php?x=0

我在通过PHP的SimpleXMLElement正确解析XML时遇到了可怕的问题。我得到的错误(下面)看起来像是一个解析错误,但我似乎找不到任何问题。而且,由于这是国家气象局的警报源,我不得不假设其他人正在使用该源并使其正常工作

我已经尝试了以下所有方法和几种变体:

$simpleFeed = new SimpleXMLElement(simplexml_load_string(file_get_contents('http://alerts.weather.gov/cap/us.php?x=0')));

我已经包括了我目前收到的错误,但是行号偶尔会改变(我不确定这是我做的还是国家气象局的Feed做的):


SimpleXMLElement::\uu construct():实体:第107行:解析器错误:应为开始标记,“为避免一些错误指示和额外路由:

$simpleFeed = new SimpleXMLElement(simplexml_load_string(file_get_contents('http://alerts.weather.gov/cap/us.php?x=0')));
这真是太过分了。以两种方式:

  • simplexml\u load\u字符串(file\u get\u contents(…)
    实际上只是
    simplexml\u load\u file(…)
    。PHP在内部使用相同的层来获取日期,无论是从
    simplexml\u load\u file
    还是
    file\u get\u contents
    中获取日期。不痛,但我想你应该知道
  • 更有害的(在不兼容的意义上)是不能实例化SimpleXMLElementSimpleXMLElement作为其构造函数的第一个参数传递。这是行不通的。我想知道您是否还没有看到其他错误,您可能认为可以安全地“跳过”这些错误,但实际上,在开发和运行软件时,倾听错误消息是至关重要的(请参阅)
  • 那么,这个咆哮的清单上说了什么?代码简单:

    $feedURL = http://alerts.weather.gov/cap/us.php?x=0';
    $xml     = simplexml_load_file($feedURL);
    if (!$xml) {
        throw new UnexpectedValueException(
            sprintf('failed to open %s', var_export($feedURL, true))
        );
    }
    

    这个小代码示例将为您提供一个SimpleXMLElement的示例,或者告诉您其他情况。您不必争论XML是否有效,或者解析器是否可以处理它。对于应用程序的其余部分,它将是相同的。打开URL失败或成功。没有什么你需要担心的了。如果URL错误,请选择正确的URL。如果XML可能已损坏,请提交错误报告。其他一切你都不必担心。只是不要把代码放在一起,你不知道它是如何工作的。在这种情况下,只需阅读手册的工作原理,仔细检查,排除故障,倾听PHP错误消息,尤其是在处理故障情况的软件中引入检查。他们在那里。为这些进行设计。

    您的第三个代码示例对我很有用,
    $xmlObj=simplexml\u load\u file('http://alerts.weather.gov/cap/us.php?x=0');。是的,它似乎也对我有用。我不确定到底是什么问题,虽然可能是文件在我加载时不完整,假设我这边没有错误(这是一个延伸)。看起来这样做很好,而且我把事情复杂化了。也谢谢你的建议。
    
    SimpleXMLElement::__construct(): Entity: line 107: parser error : Start tag expected, '<' not found
    SimpleXMLElement::__construct():  
    SimpleXMLElement::__construct(): ^ 
    
    $simpleFeed = new SimpleXMLElement(simplexml_load_string(file_get_contents('http://alerts.weather.gov/cap/us.php?x=0')));
    
    $feedURL = http://alerts.weather.gov/cap/us.php?x=0';
    $xml     = simplexml_load_file($feedURL);
    if (!$xml) {
        throw new UnexpectedValueException(
            sprintf('failed to open %s', var_export($feedURL, true))
        );
    }