Oracle xml DBMS_XMLDOM中的撇号

时间:2018-01-16 09:11:15

标签: xml oracle plsql

使用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中。

有没有办法要求不要用&逃避撇号者; ?

你可以帮忙吗?

1 个答案:

答案 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;