2009-03-12 7 views
2

J'utilise la déclaration suivante dans la partie de sélection de la requête:Comment désactiver la validation DTD XML dans Oracle DB?

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

il fonctionne bien si le doc.payload contient XML sans DTD déclaration, mais génère une erreur lorsque la déclaration DTD est présent comme Oracle tente de valider le document, mais ne trouve pas le DTD. Comment désactiver la validation XML de cette requête? Je ne veux pas affecter mon paramètre de session ni le réglage du système global dans ce domaine.

Répondre

4

Vous pouvez désactiver la validation lorsque vous créez un XMLTYPE, la signature du constructeur ressemble à ceci:

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

Vous pouvez désactiver la validation comme ceci:

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

Cela ne vous aidera pas si, si vous avez une référence DTD externe. Il essaierait quand même de le charger. Est-il impossible de télécharger le fichier DTD dans le référentiel XMLDB? Ce serait la solution la plus simple. Sinon, il n'y a pas de solution « nice », vous devez vous débarrasser de la référence DTD avant de créer le XMLTYPE:

extract(XMLTYPE(REGEXP_REPLACE(doc.payload, '<!DOCTYPE[^<]*>', '')), 
'/SHOW_SHIPMENT_005/DATAAREA/SHOW_SHIPMENT/SHIPMENT/SHIPITEM/DOCUMNTREF/DOCUMENTID') 
+0

Références dans l'utilisation I de XML sont locaux, je suis actuellement à la maison, mais une fois que je reviens à Je vais sûrement vérifier ça :) Merci! –

Questions connexes