zoukankan      html  css  js  c++  java
  • XML转义--SQL函数

    XML BI Publisher 做发票,

    物料型号中有 XML 关键字符,因此需要转义

    -------------------------------------------------------
    -- PLSQL 
    -- 傳入字串,將特殊符號轉成符合XML格式
    -------------------------------------------------------
      FUNCTION REPLACE_FOR_XML(P_STR IN  VARCHAR2) RETURN VARCHAR2 is
        v_str     varchar2(2000);
      BEGIN
         -- 單引號
        select replace(P_STR,chr(39),chr(38)||'apos;')
          into v_str
          from dual;
    
       --  2019/6/6  雙引號
       select replace(v_str,CHR(34),chr(38)||'quot;')
          into v_str
          from dual;
    
         -- & 連接符
        select replace(v_str,chr(38),chr(38)||'amp;')
          into v_str
          from dual;
    
          -- 小於號
        select replace(v_str,'<',chr(38)||'lt;')
          into v_str
          from dual;
          -- 大於號
        select replace(v_str,'>',chr(38)||'gt;')
          into v_str
          from dual;
          
        RETURN (v_str);
      END;  

    实际还是不能展出目标结果。因为 单引号及双引号转义后 字符串 分别是 “&apos;” 和 “&quot;”, 在第三个转义,则将“&”连接符再次转义为

    "&amp;"

    故 必须 要将 “&”连接字符的转义放在第一个位置。

    正确顺序如下代码:

    -------------------------------------------------------
    -- 傳入字串,將特殊符號轉成符合XML格式
    -------------------------------------------------------
      FUNCTION REPLACE_FOR_XML(P_STR IN  VARCHAR2) RETURN VARCHAR2 is
        v_str     varchar2(2000);
      BEGIN
         -- & 連接符
        select replace(P_STR,chr(38),chr(38)||'amp;')
          into v_str
          from dual;
              
         -- 單引號
        select replace(v_str,chr(39),chr(38)||'apos;')
          into v_str
          from dual;
    
       --   雙引號
       select replace(v_str,CHR(34),chr(38)||'quot;')
          into v_str
          from dual;
    
          -- 小於號
        select replace(v_str,'<',chr(38)||'lt;')
          into v_str
          from dual;
          -- 大於號
        select replace(v_str,'>',chr(38)||'gt;')
          into v_str
          from dual;
          
        RETURN (v_str);
      END;  
    优质生活从拆开始
  • 相关阅读:
    exec
    eval
    Python--day23--类的命名空间
    Python--day23--初识面向对象复习
    Python--day22--面向对象的交互
    Python--day21--异常处理
    Python--day21--包
    Python--day21--复习
    Python--day20--模块的导入
    动态加载布局的技巧
  • 原文地址:https://www.cnblogs.com/samrv/p/10996294.html
Copyright © 2011-2022 走看看