PortableInfobox/includes/services/Parser/Nodes/NodeFactory.php
2018-08-22 10:04:07 +02:00

42 lines
1.1 KiB
PHP

<?php
namespace PortableInfobox\Parser\Nodes;
use PortableInfobox\Parser\XmlParser;
class NodeFactory {
public static function newFromXML( $text, array $data = [] ) {
return self::getInstance( XmlParser::parseXmlString( $text ), $data );
}
public static function newFromSimpleXml( \SimpleXMLElement $xmlNode, array $data = [] ) {
return self::getInstance( $xmlNode, $data );
}
/**
* @param \SimpleXMLElement $xmlNode
* @param array $data
*
* @return Node|NodeUnimplemented
*/
protected static function getInstance( \SimpleXMLElement $xmlNode, array $data ) {
//wfProfileIn( __METHOD__ );
$tagType = $xmlNode->getName();
$className = 'PortableInfobox\\Parser\\Nodes\\' . 'Node' .
mb_convert_case( mb_strtolower( $tagType ), MB_CASE_TITLE );
if ( class_exists( $className ) ) {
/* @var $instance \Wikia\PortableInfobox\Parser\Nodes\Node */
$instance = new $className( $xmlNode, $data );
//wfProfileOut( __METHOD__ );
if ( $instance instanceof Node ) {
return $instance;
}
}
//wfProfileOut( __METHOD__ );
return new NodeUnimplemented( $xmlNode, $data );
}
}