Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Oracle数据库中禁用XML DTD验证?_Xml_Database_Oracle_Validation_Dtd - Fatal编程技术网

如何在Oracle数据库中禁用XML DTD验证?

如何在Oracle数据库中禁用XML DTD验证?,xml,database,oracle,validation,dtd,Xml,Database,Oracle,Validation,Dtd,我在查询的select部分使用以下语句: extract(XMLTYPE(doc.payload),'/SHOW_SHIPMENT_005/DATAAREA/SHOW_SHIPMENT/SHIPMENT/SHIPITEM/DOCUMNTREF/DOCUMENTID') 如果doc.payload包含XML而没有DTD声明,但当Oracle试图验证文档但找不到DTD时,如果出现DTD声明,则会出现错误,这会很好地工作 如何禁用此查询的XML验证?我不想在这件事上影响我的会话设置或全局系统设置。您

我在查询的select部分使用以下语句:

extract(XMLTYPE(doc.payload),'/SHOW_SHIPMENT_005/DATAAREA/SHOW_SHIPMENT/SHIPMENT/SHIPITEM/DOCUMNTREF/DOCUMENTID')
如果
doc.payload
包含
XML
而没有
DTD
声明,但当Oracle试图验证文档但找不到
DTD
时,如果出现
DTD
声明,则会出现错误,这会很好地工作


如何禁用此查询的
XML
验证?我不想在这件事上影响我的会话设置或全局系统设置。

您可以在创建XMLTYPE时关闭验证,构造函数签名如下所示:

XMLType(
   xmlData IN varchar2,
   schema IN varchar2 := NULL,
   validated IN number := 0,
   wellformed IN number := 0)
因此,您可以如下方式禁用验证:

   extract(XMLTYPE(doc.payload, NULL, 1, 1),
'/SHOW_SHIPMENT_005/DATAAREA/SHOW_SHIPMENT/SHIPMENT/SHIPITEM/DOCUMNTREF/DOCUMENTID')
但是,如果您有一个外部DTD引用,这对您没有帮助。它仍然会尝试加载它。无法将DTD文件上载到XMLDB存储库中吗?这将是最简单的解决办法。如果没有,则没有“好”的解决方案,您必须在创建XMLTYPE之前去掉DTD引用:

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

extract(XMLTYPE(REGEXP_REPLACE(doc.payload,'我使用的XML中的引用是本地的,我现在在家,但一旦我回来工作,我肯定会检查一下:)谢谢!