您可以在创建 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')