使用PLSQL,我创建了一个提供SEPA文件(xml文件)的程序。我正在使用DBMS_XMLDOM包。问题是撇号显示为'&者;”在xml文件中。
以下是该计划的一部分:
text_value := MyCursor.ndest -- this a cursor value from the database. Let's say a name (D'ASILVA)
-- displaying text_value I see the apostrophe.
child_ofchelement:= DBMS_XMLDOM.CREATEELEMENT(doc,'Nm');
node:=DBMS_XMLDOM.APPENDCHILD(parent_node,dbms_xmldom.makenode (child_ofchelement));
l_text := DBMS_XMLDOM.createTextnode(doc,trim(text_value));
node := DBMS_XMLDOM.appendchild (node,dbms_xmldom.makenode(l_text));
....
dbms_xmldom.writeToFile(doc,rep_pwd||'/'||l_outfile, 'UTF8'); -- write DOM into file
dbms_xmldom.freeDocument(doc);
数据库编码为ISO-8859-1。 在表格内部,该值具有撇号,在文件中它被&取代。者;
首先,我尝试更改文件的编码:
dbms_xmldom.writeToFile(doc,rep_pwd||'/'||l_outfile, 'WE8ISO8859P1');
良好的格式但仍然是'&者;'
其次我试过了:
text_value := utl_i18n.unescape_reference(MyCursor.ndest);
同样的问题。
它更像是'&者;”在writeToFile中。
有没有办法要求不要用&逃避撇号者; ?
你可以帮忙吗?
答案 0 :(得分:0)
您可以将文字放在CDATA栏目中:
DECLARE
doc dbms_xmldom.domdocument;
parent_node dbms_xmldom.domnode;
child_ofchelement dbms_xmldom.domelement;
node dbms_xmldom.domnode;
--change element type
l_text dbms_xmldom.DOMCDATASECTION;
text_value varchar2( 32 ) := 'D''ASILVA';
clobdoc clob;
BEGIN
doc := dbms_xmldom.newDOMDocument();
dbms_xmldom.setVersion(doc, '1.0');
parent_node := dbms_xmldom.makenode( doc );
child_ofchelement := DBMS_XMLDOM.CREATEELEMENT( doc, 'Nm' );
node := DBMS_XMLDOM.APPENDCHILD( parent_node, dbms_xmldom.makenode ( child_ofchelement ) );
--change element creation method
l_text := DBMS_XMLDOM.CREATECDATASECTION( doc, trim( text_value ) );
node := DBMS_XMLDOM.appendchild( node, dbms_xmldom.makenode( l_text ) );
dbms_lob.createtemporary(clobdoc, false);
DBMS_XMLDOM.writeToClob(doc,clobdoc);
dbms_output.put_line( clobdoc );
dbms_xmldom.freeDocument(doc);
END;