Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/04/2013, 03:37
juanpapa
 
Fecha de Ingreso: enero-2013
Mensajes: 4
Antigüedad: 11 años, 3 meses
Puntos: 0
recorrer 'schema' de un wsdl con simplexml

Hola, voy a intentar explicarme lo mejor que pueda.

Necesito obtener de alguna manera los tipos básicos de datos de los 'input' y 'output' de una operación de las disponibles en un WSDL. Todo el proceso para llegar a esa operación lo tengo mas o menos resuelto utilizando nusoap.


El problema surge cuando la definición de los tipos no está en la parte superior del WSDL explicitamente sino definidas en un "schema" a través de una url.

Ahí me quedé algo bloqueado en mi objetivo porque no sabía como obtener los datos utilizando nuSOAP. Leyendo por el foro "descubrí" simplexml y sus clases. Ahora sé como recorrer un XML y obtener sus nodos, atributos y demás. Pero como suele pasar, surge otro problema. Esa url del schema me lleva a un XML tal que así (he simplificado y modificado los nombres, pero este sería el ejemplo concreto con el que tendría el problema):


Código:
<xs:schema version="1.0" targetNamespace="http://services/">
	<xs:element name="nombre1" type="nombreComplexType1"/>
	<xs:element name="nombre2" type="nombreComplexType2"/>
	<xs:complexType name="nombreComplexType1">
		<xs:sequence>
			<xs:element name="nombre3" type="xs:string" minOccurs="0"/>
			<xs:element name="nombre4" type="xs:string" minOccurs="0"/>
			<xs:element name="nombre5" type="xs:string" minOccurs="0"/>
			<xs:element name="nombre6" type="xs:string" minOccurs="0"/>
			<xs:element name="nombre7" type="xs:string" minOccurs="0"/>
			<xs:element name="nombre8" type="xs:string" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="nombreComplexType2">
		<xs:sequence>
			<xs:element name="nombre9" type="nombreComplexType3" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="nombreComplexType3">
		<xs:sequence>
			<xs:element name="nombre10" type="xs:string" minOccurs="0"/>
			<xs:element name="nombre11" type="xs:string" minOccurs="0"/>
			<xs:element name="nombre12" type="xs:integer" minOccurs="0"/>
			<xs:element name="nombre13" type="xs:string" minOccurs="0"/>
			<xs:element name="nombre14" type="xs:string" minOccurs="0"/>
			<xs:element name="nombre15" type="xs:int" minOccurs="0"/>
			<xs:element name="nombre16" type="xs:double" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
</xs:schema>

Al intentar recorrerlo usando simplexml me devuelve sólo un nodo, el nodo "schema" e intento acceder a los hijos con la función "children()" pero no devuelve nada. No sé cual es el problema, supongo que es del xml en sí pero no logro verlo. Si alguien tuviera alguna idea de porqué y como podría recorrer los elementos le estaría muy agradecido.

un saludo y perdón por la parrafada, espero haberme explicado correctamente.
gracias.