Example #1
0
 protected function parseComplexTypes(TypesRepositoryInterface $repo)
 {
     foreach ($this->parseXPath('/xs:schema/xs:complexType') as $complex_type) {
         $name = $complex_type->getAttribute('name');
         $elementNodes = $this->parseXPath($complex_type->getNodePath() . '/xs:sequence/xs:element');
         $elements = [];
         foreach ($elementNodes as $element) {
             $elName = $element->getAttribute('name');
             $elType = NULL;
             $elComplexType = $element->getAttribute('type');
             $elSimpleType = $this->parseXPath($element->getNodePath() . '/xs:simpleType/xs:restriction', 'base');
             if ($elComplexType) {
                 $elType = $elComplexType;
             } elseif (count($elSimpleType)) {
                 $elType = $elSimpleType[0];
             } else {
                 $elType = "UnknownType";
             }
             $min_occurs = $element->getAttribute('minOccurs');
             $max_occurs = $element->getAttribute('maxOccurs');
             $elements[$elName] = new Element(['elementName' => $elName, 'type' => Helpers::cleanNamespace($elType), 'min_occurs' => $min_occurs, 'max_occurs' => $max_occurs]);
         }
         $xsd_type = new ComplexType(['name' => $name, 'elements' => $elements]);
         $repo->registerType($name, $xsd_type);
     }
 }