2015-12-11 110 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