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;  
    优质生活从拆开始
  • 相关阅读:
    Luogu P4205 [NOI2005]智慧珠游戏
    Luogu P3321 [SDOI2015]序列统计
    Luogu P2056 [ZJOI2007]捉迷藏
    Luogu P5168 xtq玩魔塔
    2019年一月刷题列表
    [转载]我们都是行走在镜面边缘的人
    [武汉加油] CF830C Bamboo Partition
    [武汉加油] [NOI Online 提高组]最小环
    [武汉加油] luogu P6178 【模板】Matrix-Tree 定理
    [武汉加油] bzoj 5099: [POI2018]Pionek 几何+双指针
  • 原文地址:https://www.cnblogs.com/samrv/p/10996294.html
Copyright © 2011-2022 走看看