Sto creando un semplice file XML 1.0 con l'aiuto di una breve funzione PL/SQL piena di dati da una tabella.Conversione di caratteri speciali PL/SQL
I dati della tabella contengono anche caratteri HTML come <>, & e così via. Per questi caratteri speciali che ho costruire una breve ricerca e la funzione che assomiglia a questo sostituire:
newXmlString := REPLACE(xmlString, '&', '&');
newXmlString := REPLACE(newXmlString, '\', '');
newXmlString := REPLACE(newXmlString, '<', '<');
newXmlString := REPLACE(newXmlString, '>', '>');
newXmlString := REPLACE(newXmlString, '"', '"');
newXmlString := REPLACE(newXmlString, '''', ''');
Ora ci sono più dati nella tabella che ha l'effetto che il file XML non è in grado di convalidare a causa di caratteri di controllo speciali (https://en.wikipedia.org/wiki/Control_character) come:
- ETX (Fine del testo)
- SYN (Synchronous Idle)
Nota: non tutti i caratteri di controllo corrompono la convalida di un file XML! Linebreaks o Carriage Return è ancora possibile.
Certo che ora possono cercare e li sostituisco così, ad esempio con:
newXmlString := REPLACE(newXmlString, chr(3), ''); -- ETX end of text
Ma c'è un accumulo in funzione o qualcosa di simile a una libreria è possibile utilizzare con PL/SQL senza elencare e di ricerca + sostituendoli?
UPDATE 1
Ho anche cercato di utilizzare la funzione dbms_xmlgen.getxml
ma questa funzione genera un errore a causa del 'carattere speciale alla conversione char sfuggito fallito.' +
UPDATE 2
Ho provato a utilizzare REGEXP_REPLACE(STRING_VALUE,'[[:cntrl:]]')
che funzionerà, ma questo eliminerà anche le interruzioni di riga, che vogliamo mantenere e non ha alcun effetto sulla convalida di un file XML.
penso 'dbms_xmlgen.convert()' è quello che stai cercando –
@a_horse_with_no_name: questo permette di convertire i caratteri HTML ma anche non i caratteri di controllo come 'SYN' – frgtv10
Ma usando che non è necessario prendersi cura di tutti i caratteri HTML, solo i caratteri di controllo. –