使用PLSQL,我创建了一个提供SEPA文件(xml文件)的程序。我正在使用DBMS_XMLDOM包。问题是撇号在xml文件中显示为'& apos;‘。
以下是程序的一部分:
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。在表中,值有撇号,在文件中它被替换为& apos;
首先,我尝试更改文件的编码:
dbms_xmldom.writeToFile(doc,rep_pwd||'/'||l_outfile, 'WE8ISO8859P1');格式很好,但仍然是“'”
其次,我尝试了:
text_value := utl_i18n.unescape_reference(MyCursor.ndest);同样的问题。
它更像是在writeToFile中变成了'& apos;‘。
有没有办法不用& apos;来转义撇号?
你能帮上忙吗?
发布于 2018-01-21 00:12:30
你可以把你的文本放在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;https://stackoverflow.com/questions/48277627
复制相似问题