我正在使用填充表中数据的简短PL/SQL函数创建一个简单的XML 1.0文件.
表中的数据还包含HTML字符,如<>,&等等.对于这些特殊字符,我构建了一个简短的搜索和替换函数,如下所示:
newXmlString := REPLACE(xmlString, '&', '&' );
newXmlString := REPLACE(newXmlString, '\', '' );
newXmlString := REPLACE(newXmlString, '<', '<' );
newXmlString := REPLACE(newXmlString, '>', '>' );
newXmlString := REPLACE(newXmlString, '"', '"' );
newXmlString := REPLACE(newXmlString, '''', ''' );
Run Code Online (Sandbox Code Playgroud)
现在表中有更多数据,因为特殊的控制字符(https://en.wikipedia.org/wiki/Control_character),XML文件无法验证:
注意:并非每个控制字符都会破坏XML文件的验证!仍然可以进行换行或回车.
当然我现在也可以搜索和替换它们,例如:
newXmlString := REPLACE(newXmlString, chr(3), '' ); -- ETX end of text
Run Code Online (Sandbox Code Playgroud)
但是,是否有一个内置函数或类似于我可以与PL/SQL一起使用而无需列出和搜索+替换它们的库?
更新1
我也尝试使用该函数,dbms_xmlgen.getxml但是这个函数抛出一个错误,因为'转义字符转换的特殊字符失败了.'+
更新2
我尝试使用REGEXP_REPLACE(STRING_VALUE,'[[:cntrl:]]')哪个会起作用,但这也会删除我们想要保留的换行符,也不会影响XML文件的验证.
小智 1
翻译确实是一条出路。使用 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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2953 次 |
| 最近记录: |