You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中从CLOB列XML第二行提取.xsd结尾URL的方法

在Oracle中从CLOB列的XML第二行提取.xsd结尾的URL

方法一:用正则表达式直接处理CLOB

如果确定目标URL一定在XML的第二行,可以先提取第二行内容,再从中匹配.xsd结尾的URL:

SELECT
  REGEXP_SUBSTR(
    -- 截取XML的第二行内容
    DBMS_LOB.SUBSTR(
      xml_clob,
      INSTR(xml_clob, CHR(10), 1, 2) - INSTR(xml_clob, CHR(10), 1, 1) - 1,
      INSTR(xml_clob, CHR(10), 1, 1) + 1
    ),
    -- 匹配http/https开头、以.xsd结尾的URL(适配引号包裹的场景)
    'https?://[^"]+\.xsd'
  ) AS xsd_url
FROM test_table;

说明

  • CHR(10)代表换行符,通过INSTR定位前两个换行符的位置,截取中间的第二行内容。
  • 正则表达式https?://[^"]+\.xsd会精准匹配到被引号包裹的、以.xsd结尾的URL,适配你给出的两种示例场景。

方法二:用XML解析(更稳定可靠)

正则处理XML容易因为格式变动(比如换行、空格调整)出错,用Oracle的XML原生函数更稳妥,不用依赖行号:

SELECT
  CASE
    -- 先判断是否存在schemaLocation属性
    WHEN EXISTSNODE(XMLTYPE(xml_clob), '//*[@xsi:schemaLocation]', 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"') THEN
      -- 提取schemaLocation中以.xsd结尾的URL
      REGEXP_SUBSTR(
        EXTRACTVALUE(XMLTYPE(xml_clob), '//*/@xsi:schemaLocation', 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'),
        '[^ ]+\.xsd'
      )
    ELSE
      -- 提取xmlns属性里的.xsd URL
      REGEXP_SUBSTR(
        EXTRACTVALUE(XMLTYPE(xml_clob), '//*/@xmlns'),
        'https?://[^"]+\.xsd'
      )
  END AS xsd_url
FROM test_table;

说明

  • XMLTYPE(xml_clob)把CLOB类型的XML转为可解析的XML对象。
  • EXISTSNODE用来判断XML是否包含schemaLocation属性,分别处理两种示例的情况。
  • EXTRACTVALUE提取对应属性的值,再用正则筛选出目标URL。

注意

  • 如果XML有其他命名空间,需要在XPath中补充对应的命名空间声明。
  • 若CLOB内容过大,可调整DBMS_LOB.SUBSTR的参数确保能完整截取目标内容。

内容的提问来源于stack exchange,提问作者user313150

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 13:35:28