PicoFeed\Parser\Parser::execute PHP Method

execute() public method

Parse the document.
public execute ( ) : PicoFeed\Parser\Feed
return PicoFeed\Parser\Feed
    public function execute()
    {
        Logger::setMessage(get_called_class() . ': begin parsing');
        $xml = XmlParser::getSimpleXml($this->content);
        if ($xml === false) {
            Logger::setMessage(get_called_class() . ': Applying XML workarounds');
            $this->content = Filter::normalizeData($this->content);
            $xml = XmlParser::getSimpleXml($this->content);
            if ($xml === false) {
                Logger::setMessage(get_called_class() . ': XML parsing error');
                Logger::setMessage(XmlParser::getErrors());
                throw new MalformedXmlException('XML parsing error');
            }
        }
        $this->used_namespaces = $xml->getNamespaces(true);
        $xml = $this->registerSupportedNamespaces($xml);
        $feed = new Feed();
        $this->findFeedUrl($xml, $feed);
        $this->checkFeedUrl($feed);
        $this->findSiteUrl($xml, $feed);
        $this->checkSiteUrl($feed);
        $this->findFeedTitle($xml, $feed);
        $this->findFeedDescription($xml, $feed);
        $this->findFeedLanguage($xml, $feed);
        $this->findFeedId($xml, $feed);
        $this->findFeedDate($xml, $feed);
        $this->findFeedLogo($xml, $feed);
        $this->findFeedIcon($xml, $feed);
        foreach ($this->getItemsTree($xml) as $entry) {
            $entry = $this->registerSupportedNamespaces($entry);
            $item = new Item();
            $item->xml = $entry;
            $item->namespaces = $this->used_namespaces;
            $this->findItemAuthor($xml, $entry, $item);
            $this->findItemUrl($entry, $item);
            $this->checkItemUrl($feed, $item);
            $this->findItemTitle($entry, $item);
            $this->findItemContent($entry, $item);
            // Id generation can use the item url/title/content (order is important)
            $this->findItemId($entry, $item, $feed);
            $this->findItemDate($entry, $item, $feed);
            $this->findItemEnclosure($entry, $item, $feed);
            $this->findItemLanguage($entry, $item, $feed);
            $this->itemPostProcessor->execute($feed, $item);
            $feed->items[] = $item;
        }
        Logger::setMessage(get_called_class() . PHP_EOL . $feed);
        return $feed;
    }