2015-12-11 109 views
5

我正在用一個表格中的數據填充一個簡短的PL/SQL函數的幫助下創建一個簡單的XML 1.0文件。PL/SQL轉換特殊字符

表中的數據還包含HTML字符,如<>,&等。 對於這些特殊字符我已經建立一個短期的搜索和替換功能,看起來像這樣:

newXmlString := REPLACE(xmlString, '&', '&amp;'); 
newXmlString := REPLACE(newXmlString, '\', ''); 
newXmlString := REPLACE(newXmlString, '<', '&lt;'); 
newXmlString := REPLACE(newXmlString, '>', '&gt;'); 
newXmlString := REPLACE(newXmlString, '"', '&quot;'); 
newXmlString := REPLACE(newXmlString, '''', '&apos;'); 

現在有在這具有XML文件是不能夠因爲要驗證的效果表的詳細數據特殊的控制字符(https://en.wikipedia.org/wiki/Control_character)像:

  • ETX(文本結束)
  • SYN(同步空閒)

注意:並非每個控制字符都會破壞XML文件的驗證!換行或回車仍然是可能的。

當然我現在可以搜索並替換它們爲好,例如有:

newXmlString := REPLACE(newXmlString, chr(3), ''); -- ETX end of text 

但有功能或像一個圖書館,我可以用PL/SQL中使用的東西建立一個沒有上市和搜索+替換它們?

更新1

我也試圖使用功能dbms_xmlgen.getxml但這個函數拋出,因爲一個錯誤「以逃脫字符轉換失敗特殊字符。」 +

更新2

我試過使用REGEXP_REPLACE(STRING_VALUE,'[[:cntrl:]]')這會工作,但是這也會刪除我們想要保留的換行符,並且對驗證XML文件也沒有影響。

+1

我想'dbms_xmlgen.convert()'是你在找什麼 –

+0

@a_horse_with_no_name:這將轉換成HTML字符,但也沒有控制字符,如「SYN」 – frgtv10

+0

但使用的是你並不需要照顧所有的HTML字符,只有控制字符。 –

回答

1

TRANSLATE確實是要走的路。使用CHR函數構建一個字符串並僅應用一次。 以下是ETX的示例:3,EOT:4和SYN:22.您可以在需要時添加其他人。

請注意字符串開頭處的'a',它返回爲第二個字符串中唯一的字符。 該功能需要一個不被消除的字符。

FUNCTION clean_control(in_text IN VARCHAR2) 
    RETURN VARCHAR2 
IS 
    v_search VARCHAR2(30) := 'a' || CHR(3) || CHR(4) || CHR(22); 
BEGIN 
    RETURN TRANSLATE(in_text, v_search, 'a'); 
END; 
+0

謝謝你這個很好的功能 – frgtv10