PortableInfobox/includes/services/Parser/Nodes/NodeFactory.php

40 lines
973 B
PHP
Raw Normal View History

<?php
2022-03-11 20:35:51 +00:00
namespace PortableInfobox\Parser\Nodes;
use PortableInfobox\Parser\XmlParser;
2022-03-11 20:35:51 +00:00
use SimpleXMLElement;
class NodeFactory {
2018-08-16 09:25:53 +00:00
public static function newFromXML( $text, array $data = [] ) {
return self::getInstance( XmlParser::parseXmlString( $text ), $data );
}
2022-03-11 20:35:51 +00:00
public static function newFromSimpleXml( SimpleXMLElement $xmlNode, array $data = [] ) {
return self::getInstance( $xmlNode, $data );
}
/**
2022-03-11 20:35:51 +00:00
* @param SimpleXMLElement $xmlNode
* @param array $data
*
* @return Node|NodeUnimplemented
*/
2022-03-11 20:35:51 +00:00
protected static function getInstance( SimpleXMLElement $xmlNode, array $data ) {
$tagType = $xmlNode->getName();
2022-03-11 20:35:51 +00:00
$className = Node::class . mb_convert_case( mb_strtolower( $tagType ), MB_CASE_TITLE );
if ( class_exists( $className ) ) {
2022-03-11 20:35:51 +00:00
/* @var $instance Node */
$instance = new $className( $xmlNode, $data );
2018-08-22 08:04:07 +00:00
if ( $instance instanceof Node ) {
return $instance;
}
}
return new NodeUnimplemented( $xmlNode, $data );
}
2018-08-16 09:25:53 +00:00
}