public function parseXml($xmlString)
    {
        $sourceXml = new \SimpleXMLElement($xmlString);
        $sourceArray = (array) $sourceXml;

        if (array_key_exists(Resources::AUTHOR, $sourceArray)) {
            $this->author = $this->processAuthorNode($sourceArray);
        }

        if (array_key_exists(Resources::CATEGORY, $sourceArray)) {
            $this->category = $this->processCategoryNode($sourceArray);
        }

        if (array_key_exists(Resources::CONTRIBUTOR, $sourceArray)) {
            $this->contributor = $this->processContributorNode($sourceArray);
        }

        if (array_key_exists('generator', $sourceArray)) {
            $generator = new Generator();
            $generator->setText((string) $sourceArray['generator']->asXML());
            $this->generator = $generator;
        }

        if (array_key_exists('icon', $sourceArray)) {
            $this->icon = (string) $sourceArray['icon'];
        }

        if (array_key_exists('id', $sourceArray)) {
            $this->id = (string) $sourceArray['id'];
        }

        if (array_key_exists(Resources::LINK, $sourceArray)) {
            $this->link = $this->processLinkNode($sourceArray);
        }

        if (array_key_exists('logo', $sourceArray)) {
            $this->logo = (string) $sourceArray['logo'];
        }

        if (array_key_exists('rights', $sourceArray)) {
            $this->rights = (string) $sourceArray['rights'];
        }

        if (array_key_exists('subtitle', $sourceArray)) {
            $this->subtitle = (string) $sourceArray['subtitle'];
        }

        if (array_key_exists('title', $sourceArray)) {
            $this->title = (string) $sourceArray['title'];
        }

        if (array_key_exists('updated', $sourceArray)) {
            $this->updated = \DateTime::createFromFormat(
                \DateTime::ATOM,
                (string) $sourceArray['updated']
            );
        }
    }