Foros del Web » Programando para Internet » PHP »

recorrer 'schema' de un wsdl con simplexml

Estas en el tema de recorrer 'schema' de un wsdl con simplexml en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 25/04/2013, 03:37
 
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.
  #2 (permalink)  
Antiguo 29/04/2013, 08:32
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: recorrer 'schema' de un wsdl con simplexml

http://www.php.net/manual/es/book.simplexml.php
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 29/04/2013, 08:42
 
Fecha de Ingreso: enero-2013
Mensajes: 4
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: recorrer 'schema' de un wsdl con simplexml

Ya me leí la documentación y aprendí a recorrer un xml, hice algunas pruebas y todo ok, pero en el documento que puse de ejemplo no me devuelve los 'hijos' del 'schema'. No sé porqué falla y no sé de otra manera de intentar recorrer el documento y obtener la información de los distintos datos. ¿alguna idea?

gracias por la respuesta
  #4 (permalink)  
Antiguo 18/02/2014, 07:29
 
Fecha de Ingreso: mayo-2013
Mensajes: 1
Antigüedad: 11 años
Puntos: 0
Respuesta: recorrer 'schema' de un wsdl con simplexml

Hola, estoy haciendo un programa que me detecte las referencias cíclicas de un XSD (Esquema de datos en XML). La solución para lo que estas preguntando es la siguiente: primero imprime la estructura de la variable que esta tomando el wsdl,
ej: $wsdl = simplexml_load_file($entrada);
allí podrás ver cual es la estructura y podrás recorrerla sin inconvenientes, para tomar un nodo o el atributo sigue las siguientes instrucciones:

xsd de ejemplo:

<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://blablabla/PersonName"
targetNamespace="http://blablabla/PersonName"
elementFormDefault="qualified">

<complexType name="PersonName">
<sequence>
<element name="FirstName" type="string" minOccurs="0"/>
<element name="LastName" type="string" minOccurs="0"/>
<element name="SecondFamilyName" type="string" minOccurs="0"/>
<element name="Nickname" type="string" minOccurs="0"/>
<element name="PreferedName" type="string" minOccurs="0"/>
<element name="LegalName" type="string" minOccurs="0"/>
</sequence>
</complexType>
</schema>

$NombreComplexType= (string)$xml->complexType["name"];
Tiene almacenado: PersonName

$ElementName= (string)$xml->complexType->sequence->element[2]["name"];
Tiene almacenado: SecondFamilyName

Espero que le haya servido...

Etiquetas: schema, simplexml, wsdl, xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:26.