gpt4 book ai didi

xml - 如何在 Oracle DB 中禁用 XML DTD 验证?

转载 作者:搜寻专家 更新时间:2023-10-30 20:13:46 25 4
gpt4 key购买 nike

我在查询的选择部分使用了以下语句:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com