Przeglądaj źródła

updated parse simpleType restrictions

Piotr Labudda 8 lat temu
rodzic
commit
cf984efd80
1 zmienionych plików z 17 dodań i 10 usunięć
  1. 17 10
      SE/se-lib/XML.php

+ 17 - 10
SE/se-lib/XML.php

@@ -224,10 +224,24 @@ class XML {
 	public static function findElementRestrictions($docArray, $nodeArray) {
 		$restrictions = [];
 		$fieldName = self::findElementName($docArray, $nodeArray);
-		DBG::log([ 'is_empty($nodeArray[2])' => empty($nodeArray[2]), 'is_empty_type' => empty($nodeArray[1]['type']) ], 'array', "DBG: findElementRestrictions field({$fieldName})");
+		$childNodes = !empty($nodeArray[2]) ? $nodeArray[2] : null; // definition in child nodes
+		$typeAlias = !empty($nodeArray[1]['type']) ? $nodeArray[1]['type'] : null; // definition alias - search simpleType with name = Type
+		DBG::log([
+			'has $childNodes' => !empty($childNodes),
+			'has $typeAlias' => !empty($typeAlias),
+			'$typeAlias' => $typeAlias,
+			'$nodeArray' => $nodeArray
+		], 'array', "DBG: findElementRestrictions field({$fieldName})");
 		if (!empty($nodeArray[1]['nillable']) && 'true' === $nodeArray[1]['nillable']) $restrictions['nillable'] = true;
-		if (!empty($nodeArray[2])) {
-			foreach ($nodeArray[2] as $c) {
+		if ($typeAlias) {
+			list($prefix, $name) = explode(':', $typeAlias);
+			if ($prefix === XML::findTargetNamespacePrefix($docArray)) {
+				$simpleTypeNode = self::findSimpleTypeNode($docArray, $name);
+				return XML::parseSimpleTypeRestrictions($docArray, $simpleTypeNode, $fieldName);
+			}
+		}
+		if ($childNodes) {
+			foreach ($childNodes as $c) {
 				switch (XML::getTagName($c[0])) {
 					case 'annotation': break; // skip xsd:element/xsd:annotation @see findElementAppInfo
 					case 'simpleType': $restrictions = XML::parseSimpleTypeRestrictions($docArray, $c, $fieldName);
@@ -237,13 +251,6 @@ class XML {
 				}
 			}
 		}
-		if (!empty($nodeArray[1]['type'])) {
-			list($prefix, $name) = explode(':', $nodeArray[1]['type']);
-			if ($prefix === XML::findTargetNamespacePrefix($docArray)) {
-				$simpleTypeNode = self::findSimpleTypeNode($docArray, $name);
-				return XML::parseSimpleTypeRestrictions($docArray, $simpleTypeNode, $fieldName);
-			}
-		}
 		return $restrictions;
 	}
 	public static function parseSimpleTypeRestrictions($docArray, $simpleTypeNode, $fieldName) { // $simpleTypeNode must be 'simpleType' === XML::getTagName($nodeArray[0]), expected 'xsd:restriction' child