作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在查询的选择部分使用了以下语句:
extract(XMLTYPE(doc.payload),'/SHOW_SHIPMENT_005/DATAAREA/SHOW_SHIPMENT/SHIPMENT/SHIPITEM/DOCUMNTREF/DOCUMENTID')
如果 doc.payload
包含没有 DTD
声明的 XML
,它会很好地工作,但是当 DTD
时会引发错误> 声明存在,因为 Oracle 试图验证文档但找不到 DTD
。
如何禁用此查询的 XML
验证?我不想在这件事上影响我的 session 设置或全局系统设置。
最佳答案
您可以在创建 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')
关于xml - 如何在 Oracle DB 中禁用 XML DTD 验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/637803/
我是一名优秀的程序员,十分优秀!