【问题标题】:Error while extracting xml from a clob column从 clob 列中提取 xml 时出错
【发布时间】:2012-07-16 21:25:21
【问题描述】:

我在包含 xml 数据的表中有一个 Clob 列。 我尝试通过编写查询来提取数据:

select XMLTYPE.createxml(e.cdxml_index).extract('//page/fragment/text()') from chemical_structures e where e.primary_key=20;

我得到的错误信息是:

错误报告: SQL 错误:ORA-31020:不允许该操作,原因:出于安全原因,服务器端不允许通过 XDB 存储库进行 ftp 和 http 访问 ORA-06512: 在 "SYS.XMLTYPE" 第 5 行 31020. 00000 - “不允许该操作,原因:%s” *原因:尝试的操作是不允许的 *操作:查看原因并更改为有效操作。

clob列数据如下:

(CLOB) <?xml version="1.0"  ?>
<!DOCTYPE CDXML SYSTEM "http://www.***.com/xml/cdxml.dtd" >
<CDXML
 <page
 id="12"
 BoundingBox="0 0 540 719.75"
><fragment
 id="9"
 BoundingBox="91.5 111.75 104.01 123.21"
><n
id="8"
p="94.94 117.6"
Z="2"
Element="35"
NumHydrogens="0"
Charge="-1"
AS="N"
><t
id="7"
p="91.5 121.5"
BoundingBox="91.5 111.75 104.01 123.21"
><s font="3" size="10" face="96">Br-</s></t></n></fragment></page></CDXML>

我在一个与 xml 中的 DOCTYPE 声明有关的论坛上阅读。

任何人都可以提出一种我可以使它工作的方法吗?

谢谢

【问题讨论】:

    标签: xml oracle11g


    【解决方案1】:

    我找到了解决方法。

    我不得不禁用 xml dtd 验证,但在尝试了各种讨论板上提到的一些事情后,这并没有奏效。

    最后我决定忽略 xml 中的 doctype 声明。为此,我使用了 REGEXP_REPLACE 方法。

    以下查询给出了我正在寻找的内容:

    select extract(XMLTYPE(REGEXP_REPLACE(e.cdxml_index, '<!DOCTYPE CDXML SYSTEM "http://***/xml/cdxml.dtd" >', '')),'//page/fragment/n') from chemical_structures e where e.primary_key=20;
    

    我得到以下输出:

    <n
    id="8"
    p="94.94 117.6"
    Z="2"
    Element="35"
    NumHydrogens="0"
    Charge="-1"
    AS="N"
    ><t
    id="7"
    p="91.5 121.5"
    BoundingBox="91.5 111.75 104.01 123.21"
    ><s font="3" size="10" face="96">Br-</s></t></n>
    

    【讨论】:

    • 我尝试在级别 2 使用事件 31156 禁用 DTD,但随后我得到“LPX-00225:结束元素标记“HEAD”与开始元素标记“META”不匹配。如果我从文档中完全删除 DTD,或者像您一样尝试 REGEXP_REPLACE,我再次得到 LPX-00225。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2015-09-08
    • 2023-03-10
    • 2016-07-19
    • 2015-06-12
    • 2015-11-21
    • 2016-05-27
    相关资源
    最近更新 更多