代码之家  ›  专栏  ›  技术社区  ›  Mick Greener

在Oracle PL/SQL中使用XML模式验证XML文档?

  •  0
  • Mick Greener  · 技术社区  · 8 年前

    XML_TABLE 只有一列, SYS_NC_ROWINFO$ 。我希望使用的模式也包含在同一个Oracle数据库中,作为XML模式(CLOB),其URL为 StructuredProductsXMLSchema0v0.1.49.xsd .

    目前,我只是尝试验证其中一个XML文档(因此 rownum = 1

    create or replace procedure XML_FILE_VALIDATOR is
    
    XDATA XMLType;
    
    begin
    
      select SYS_NC_ROWINFO$ into XDATA
      from XML_TABLE
      where rownum = 1;
    
      XDATA.isSchemaValid('StructuredProductsXMLSchema0v0.1.49.xsd');
      if XDATA.isSchemaValid = 1 then
        dbms_output.put_line ('XML document is VALID');
    
      else
        dbms_output.put_line ('XML document is INVALID => '||sqlerrm);
    
      end if;
    end;
    

    不幸的是,我收到一条错误消息:

    PLS-00221:“ISSCHEMAVALID”不是程序或未定义

    如果您能帮助解决这个问题,我们将不胜感激。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Paul    8 年前

    link to the docs .我不知道你的说法,但应该没那么重要。

    PL/SQL函数 isSchemaValid

    XDATA.isSchemaValid('StructuredProductsXMLSchema0v0.1.49.xsd'); .

    你不需要它。

    这不是您的情况,因为您的XML文档不是基于模式的。

    if XDATA.isSchemaValid('StructuredProductsXMLSchema0v0.1.49.xsd') then
    ....
    end if
    

    这可能会奏效。顺便说一句,我不确定这个url是否正确(它们通常看起来有点不同,但你可以找到它,只需登录即可 ALL_XML_SCHEMAS