Pregunta

Estoy usando la siguiente declaración en la parte seleccionada de la consulta:

extract(XMLTYPE(doc.payload),'/SHOW_SHIPMENT_005/DATAAREA/SHOW_SHIPMENT/SHIPMENT/SHIPITEM/DOCUMNTREF/DOCUMENTID')

funciona bien si doc.payload contiene XML sin declaración DTD , pero genera un error cuando DTD la declaración está presente cuando Oracle intenta validar el documento pero no puede encontrar el DTD .

¿Cómo deshabilitar la validación XML para esta consulta? No quiero afectar la configuración de mi sesión ni la configuración del sistema global en este asunto.

¿Fue útil?

Solución

Puede desactivar la validación cuando crea un XMLTYPE, la firma del constructor se ve así:

XMLType(
   xmlData IN varchar2,
   schema IN varchar2 := NULL,
   validated IN number := 0,
   wellformed IN number := 0)

Para que pueda desactivar la validación de esta manera:

   extract(XMLTYPE(doc.payload, NULL, 1, 1),
'/SHOW_SHIPMENT_005/DATAAREA/SHOW_SHIPMENT/SHIPMENT/SHIPITEM/DOCUMNTREF/DOCUMENTID')

Sin embargo, esto no lo ayudará si tiene una referencia de DTD externa. Todavía intentaría cargarlo. ¿No es posible cargar el archivo DTD en el repositorio XMLDB? Esa sería la solución más simple. Si no, no hay una solución 'agradable', debe deshacerse de la referencia DTD antes de crear XMLTYPE:

   extract(XMLTYPE(REGEXP_REPLACE(doc.payload, '<!DOCTYPE[^<]*>', '')),
'/SHOW_SHIPMENT_005/DATAAREA/SHOW_SHIPMENT/SHIPMENT/SHIPITEM/DOCUMNTREF/DOCUMENTID')
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top