Eliminando todos los espacios de nombres en el xml y válidos por wsdl
Frecuentes
Visto 3,970 veces
-1
Nuevamente, estoy de regreso con una pregunta relacionada con el mismo wsdl, esta vez quería eliminar todos los espacios de nombres en la solicitud y cumplir con el wsdl.
El mismo wsdl tripservice wsdl de el enlace , simplemente reemplace el elemento "desde" con el siguiente.
<xs:element minOccurs="0" name="from" nillable="true">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="12"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
Usando soapui, sabemos que el siguiente xml de solicitud se ajusta a wsdl.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:trip="http://trip.price.service" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
<soapenv:Body>
<trip:getTripPrice>
<trip>
<adults>9</adults>
<duration>9</duration>
<from xsi:nil="true" />
<rooms>3</rooms>
</trip>
</trip:getTripPrice>
</soapenv:Body>
</soapenv:Envelope>
Eliminé casi todos los espacios de nombres de la solicitud, sin embargo, no pude eliminar el espacio de nombres xsi de la solicitud, para cumplir con wsdl
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Header/>
<Body>
<getTripPrice xmlns="http://trip.price.service">
<trip xmlns="">
<adults>9</adults>
<duration>9</duration>
<from xsi:nil="true" />
<rooms>3</rooms>
</trip>
</getTripPrice>
</Body>
</Envelope>
¿Cómo eliminar también el espacio de nombres xsi, aún válido según el wsdl?
1 Respuestas
0
Esta es una pregunta genérica de procesamiento de XML, "¿Cómo controla el uso y la producción de prefijos de espacio de nombres en el productor de XML 'x'"? En su caso, según los comentarios, 'xml productor X es xslt.' Luego dependerá de qué implementación de XSLT esté utilizando y si tiene alguna opción para controlar este comportamiento particular.
En general, xslt adopta la actitud habitual de que los prefijos de espacio de nombres son simplemente azúcar sintáctico y no ofrece mecanismos convenientes para controlar su uso. Es posible que pueda alentarlo a hacer un mayor uso de los prefijos declarándolos en la parte superior de su definición XSLT.
Recomiendo la compresión como la solución real para reducir el uso del ancho de banda.
respondido 09 mar '12, 17:03
Gracias. Solo necesito el archivo xml anterior (el xml que comienza con Envelope y no con soapenv:Envelope), modificado para que en lugar de xsi:nil="true", tenga nil="true" (con alguna declaración de espacio de nombres puede ser) - Suresh
desde este enlace w3schools.com/xml/xml_namespaces.asp, sabemos que "definir un espacio de nombres predeterminado para un elemento nos evita usar prefijos en todos los elementos secundarios". Todo lo que necesito es cómo definir un espacio de nombres predeterminado para un atributo. - Suresh
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas wsdl xsd xml-namespaces soapui or haz tu propia pregunta.
Ningún wsdl puede decirle que no envíe el espacio de nombres xsi o cualquier otro espacio de nombres. - bmargulies
está bien. Entonces, si tenemos algún atributo con espacio de nombres, ¿siempre debemos enviarlo? En el caso del elemento, sabemos que si agregamos xmlns="url correspondiente al espacio de nombres", junto con el elemento, no es necesario mencionar el espacio de nombres junto con el elemento. - Suresh
Los atributos de definición de prefijo de espacio de nombres no pueden cambiar el cumplimiento de un mensaje con un WSDL/esquema. Uno, el espacio de nombres real asignado al nodo en sí a través de xmlns= o un prefijo importa. - bmargulies
Quería eliminar el prefijo solo, es decir, en lugar de xsi: nil = "verdadero", solo nil = "verdadero", con algo de xmlns = definición - Suresh
¿Por qué? Eso no puede cambiar el cumplimiento. El conjunto de datos es idéntico en ambos sentidos. Dudo que soapui tenga algo para ayudarte con esto. - bmargulies