Hola amigos,
Estoy creando un programa que lea un archivo SOAP XML, pero estoy teniendo problema con la forma como se generan los nodos, esto utilizando el experto xml data binding, ya encontré como solucionar la localización de nodos con diferente namespace.
El siguiente es un ejemplo de lo que estoy intentando serializar.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <soapenv:Header/> <soapenv:Body> <ser:envioMan> <man> <InformacionGeneral> <IdAsociado>987654321</IdAsociado> <FechaRegistro>13082015162803</FechaRegistro> <TipoMovimiento>33</TipoMovimiento> </InformacionGeneral> <InformacionDocumento> <Numero>596312</Numero> <PesoBruto>55</PesoBruto> <UnidadMedida>PZA</UnidadMedida> <NumeroPiezas>444</NumeroPiezas> </InformacionDocumento> </man> </ser:envioMan> </soapenv:Body> </soapenv:Envelope>
El código que estoy utilizando es éste:
procedure TXMLBodyType.AfterConstruction; begin DeclareNamespace('ser','http://service/'); RegisterChildNode('envioMan', TXMLEnvioManType, 'http://service/'); inherited; end; function TXMLBodyType.Get_EnvioMan: IXMLEnvioManType; begin Result := ChildNodes.FindNode('envioMan','http://service/') as IXMLEnvioManType; if not Assigned(result) then Result := ChildNodes['envioMan'] as IXMLEnvioManType; end;
Hasta aquí todo bien, encuentra el nodo <ser:envioMan>, mi problema es que todos los nodos hijos ya no se localizan porque les agrega el prefijo <ser:> cuando no tienen, al momento que intento obtener los nodos hijos me muestra lo siguiente:
<ser:man xmlns:ser="http://service/"/>
Lo que necesito es eliminar el namespace después de que ya encontré el nodo padre.
Espero haber sido claro, si necesitan mayor información con gusto se las dejo saber.
Saludos