dom = $dom; $this->xpath = new \DOMXPath($this->dom); $this->elementParser = $elementParser ?? new MicrodataElementParser; } /** * Parses microdata and returns result as object * * @return \stdClass */ public function parse() : \stdClass { $result = new \stdClass; $result->items = []; foreach ($this->getTopLevelItems() as $item) { $result->items[] = $this->elementParser->parse($item); } return $result; } /** * Finds top level items in document * * @see https://www.w3.org/TR/2018/WD-microdata-20180426/#dfn-top-level-microdata-item * * @return \DOMNodeList */ protected function getTopLevelItems() : \DOMNodeList { return $this->xpath->query('//*[@itemscope and not(@itemprop)]'); } }